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




猜你喜欢

转载自blog.csdn.net/tangedegushi/article/details/80706578
今日推荐