1. 程式人生 > >自動維護一個Activity棧管理

自動維護一個Activity棧管理

        對於Android來說,本身是有activity的棧管理的,對於大部分的需求也是可以通過啟動模式解決的,但是有一些時候還是需要我們自己去維護一個activity的棧管理來實現我們的需求,比如:

        1、要獲取單前的activity是哪一個;

        2、關閉指定的activity;

        3、關閉所有activity等;

而且是在開發的比較後期的時候發現這樣的需求,這時候我們怎樣才能以最小的代價來維護一個自己的棧管理?這裡我的解決方案就是在Application中新增一行程式碼就可以自動維護一個屬於你自己的棧管理,這個要怎麼來實現呢?這裡我們先看一個維護activity棧管理的工具類:

public class ActivityStackManager implements Application.ActivityLifecycleCallbacks{

    private Stack<Activity> stack;
    private ActivityStackManager() {
        stack = new Stack<>();
}

    private static class Instance{
        public static ActivityStackManager INSTANCE = new ActivityStackManager();
} public static ActivityStackManager getInstance() { return Instance.INSTANCE; } public void register(Application app) { app.registerActivityLifecycleCallbacks(this); } public void unRegister(Application app) { app.unregisterActivityLifecycleCallbacks(this); } /**
* @param activity 需要新增進棧管理的activity */ public void addActivity(Activity activity) { stack.add(activity); } /** * @param activity 需要從棧管理中刪除的activity * @return */ public boolean removeActivity(Activity activity) { return stack.remove(activity); } /** * @param activity 查詢指定activity在棧中的位置,從棧頂開始 * @return */ public int searchActivity(Activity activity) { return stack.search(activity); } /** * @param activity 將指定的activity從棧中刪除然後finish()掉 */ public void finishActivity(Activity activity) { stack.pop().finish(); } /** * @param activity 將指定類名的activity從棧中刪除並finish()掉 */ public void finishActivityClass(Class<Activity> activity) { if (activity != null) { Iterator<Activity> iterator = stack.iterator(); while (iterator.hasNext()) { Activity next = iterator.next(); if (next.getClass().equals(activity)) { iterator.remove(); finishActivity(next); } } } } /** * 銷燬所有的activity */ public void finishAllActivity() { while (!stack.isEmpty()) { stack.pop().finish(); } } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { addActivity(activity); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { removeActivity(activity); } }

還是挺簡單的,棧的管理就是一個集合的管理,這個集合中存放的都是activity,最後一步就是在Application中進行註冊了:

public class MyApplication extends Application {

    @Override
public void onCreate() {
        super.onCreate();
ActivityStackManager.getInstance().register(this);
}
}
到這裡,就已經實現了對我們應用的activity的棧管理了,如果這個棧管理的功能還不能滿足你的需求,那你還可以在這裡新增你自己的需求,對於之前維護activity棧,基本都是實現基類的activity,這裡直接註冊一下就搞定,瞬間感覺方便多了。