对于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,这里直接注册一下就搞定,瞬间感觉方便多了。