博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动维护一个Activity栈管理
阅读量:4179 次
发布时间:2019-05-26

本文共 3154 字,大约阅读时间需要 10 分钟。

        对于Android来说,本身是有activity的栈管理的,对于大部分的需求也是可以通过启动模式解决的,但是有一些时候还是需要我们自己去维护一个activity的栈管理来实现我们的需求,比如:

        1、要获取单前的activity是哪一个;

        2、关闭指定的activity;

        3、关闭所有activity等;

而且是在开发的比较后期的时候发现这样的需求,这时候我们怎样才能以最小的代价来维护一个自己的栈管理?这里我的解决方案就是在Application中添加一行代码就可以自动维护一个属于你自己的栈管理,这个要怎么来实现呢?这里我们先看一个维护activity栈管理的工具类:

public class ActivityStackManager implements Application.ActivityLifecycleCallbacks{    private Stack
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) { if (activity != null) { Iterator
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,这里直接注册一下就搞定,瞬间感觉方便多了。

转载地址:http://ezhai.baihongyu.com/

你可能感兴趣的文章
基于SSM的街道办安全管理系统 JAVA
查看>>
基于SSM的论文选题管理系统 JAVA
查看>>
生成器模式
查看>>
工厂方法模式
查看>>
阿里规范(一)关于CountDownLatch和ThreadLocalRandom的详解(带测试代码)
查看>>
Mysql 函数 STR_TO_DATE
查看>>
Commons CLI 使用介绍
查看>>
Mybatis 缓存实现原理——案例实践
查看>>
Mybatis 缓存实现原理
查看>>
怎么提升SQL查询效率
查看>>
预编译防止sql注入
查看>>
覆盖equals方法时总是要覆盖hashCode
查看>>
clone详解
查看>>
【Java并发编程实战】——AbstractQueuedSynchronizer源码分析(一)
查看>>
【Java并发编程实战】——并发编程基础
查看>>
【Java并发编程实战】——Java内存模型与线程
查看>>
Java复制文件的4种方式
查看>>
mysql的JDBC连接工具类
查看>>
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>