1. 程式人生 > >Activity任務棧的管理 -----銷燬前一個相同的activity(還有一種簡單的方法實現)

Activity任務棧的管理 -----銷燬前一個相同的activity(還有一種簡單的方法實現)

需求:介面A跳轉到介面B,之後再跳轉到介面A,此時需要銷燬第一次建立的介面A,以此類推….

思路:(在每次建立當前Activity的時候銷燬前部的activity即可,然後在添加當前activity的引用)

編寫ActivityManagement的介面控制管理器

package com.lzyc.ybtappcal.app;

import android.support.v4.app.FragmentActivity;

import java.util.LinkedList;

/**
 * 介面控制管理類
 * package_name com.lzyc.ybtappcal.app
 */
public class ActivityManagement { private static ActivityManagement instance; private static LinkedList<FragmentActivity> activityList; private static LinkedList<FragmentActivity> activityListRegister; private static LinkedList<FragmentActivity> activityListCapture; public
ActivityManagement(){ if(activityList==null){ activityList=new LinkedList<FragmentActivity>(); } if(activityListRegister==null){ activityListRegister=new LinkedList<FragmentActivity>(); } if(activityListCapture==null){ activityListCapture=new
LinkedList<FragmentActivity>(); } } public static ActivityManagement getInstance(){ if(instance==null){ instance=new ActivityManagement(); } return instance; } public void addActivity(FragmentActivity acy) { activityList.add(acy); } public void addActivityRegiser(FragmentActivity acy) { activityListRegister.add(acy); } public void addActivityCapture(FragmentActivity acy) { activityListCapture.add(acy); } /** * 銷燬所有 */ public static void removeAll(){ FragmentActivity acy; while (activityList.size() != 0) { //poll(),方法檢索並移除此列表的頭元素(第一個元素) acy = activityList.poll(); //isFinishing(),判斷當前activity是否被幹掉;避免空指標 if (acy != null && !acy.isFinishing()) { acy.finish(); } } } /** * 銷燬註冊相關介面 */ public static void removeRegisterAll(){ FragmentActivity acy; while (activityListRegister.size() != 0) { acy = activityListRegister.poll(); if (acy != null && !acy.isFinishing()) { acy.finish(); } } } /** * 銷燬註冊相關介面 */ public static void removeCaptureAll(){ FragmentActivity acy; while (activityListCapture.size() != 0) { acy = activityListCapture.poll(); if (acy != null && !acy.isFinishing()) { acy.finish(); } } } }

這裡介面A和介面B,整合BaseActivity,所以我們在BaseActivity的onCreate中添加當前的引用到集合中去

第一步:BaseActivity中添加當前activity的引用

    ActivityManagement.getInstance().addActivity(this);

第二步:在介面A中先清空,在新增

       //移除做了判斷,避免第一次建立的時候沒有前一個空指標
        ActivityManagement.removeCaptureAll();
        ActivityManagement.getInstance().addActivityCapture(this);

第三步:在介面B新增,當前的應引用

   ActivityManagement.getInstance().addActivityCapture(this);

最後就搞定了,想寫Demo試試的話在 onCreate 和onDestory列印Log看看建立的次數即可

實現方式二: 介面A跳轉介面B(此時銷燬A),介面B在跳轉介面A(此時銷燬B),如此迴圈… 注:這些Activity都是在一個任務棧裡面的

簡單的實現為:

//只需要在介面跳轉的時候,給Flag,    findViewById(R.id.start_black).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                //設定這連個Flag就可以解決了
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                intent.setClass(ActivityThird.this, ActivitySecond.class);
                startActivity(intent);
            }
        });

如圖:

這裡寫圖片描述