自動維護一個Activity棧管理
阿新 • • 發佈:2019-02-02
對於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,這裡直接註冊一下就搞定,瞬間感覺方便多了。