Activity统一堆栈管理

简介: Activity统一堆栈管理

在我们App运行时,可能在某个界面需要退出App,如果你没有把之前的Activity都finish掉的话(每次跳转都把前一个Activity finish掉,虽然可以实现,但本人不建议这种写法,因为有的Activity需要反复调用,不能每一次都取create),那么当你点击返回键的时候,并不能实现直接退出,这种时候,就需要我们对Activity做一个统一的管理。


原理是,写一个BaseActivity继承自Activity,然后在Oncreate方法里,把当前的Activity加到我们Activity管理容器里,然后在需要的时候,遍历这个容器,把所有Activity都finish掉。


直接上代码:


Activity管理类:AppManager


/**
 * @author:程龙 date; On 2018/8/9
 */
public class AppManager {
    private static Stack<Activity> activityStack = new Stack<Activity>();
    /**
     * 添加Activity到堆栈
     */
    public static void addActivity(Activity activity) {
        activityStack.push(activity);
    }
    /**
     * 获取当前Activity(堆栈中最后一个压入的)
     */
    public static Activity currentActivity() {
        return activityStack.lastElement();
    }
    /**
     * 结束当前Activity(堆栈中最后一个压入的)
     */
    public static void finishCurrentActivity() {
        Activity activity = activityStack.pop();
        activity.finish();
    }
    /**
     * 结束指定的Activity
     */
    public static void finishActivity(Activity activity) {
        if (activity != null) {
            activityStack.remove(activity);
            if(!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
    /**
     * 结束指定类名的Activity
     */
    public static void finishActivity(Class<?> cls) {
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
            }
        }
    }
    /**
     * 结束所有Activity
     */
    public static void finishAllActivity() {
        for (Activity activity : activityStack) {
            if (activity != null) {
                activity.finish();
            }
        }
        activityStack.clear();
    }
    /**
     * 退出应用程序
     */
    public static void AppExit(Context context) {
        try {
            finishAllActivity();
            ActivityManager manager = (ActivityManager) context
                    .getSystemService(Context.ACTIVITY_SERVICE);
            manager.killBackgroundProcesses(context.getPackageName());
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这样,我们只要把自己的Activity继承自BaseActivity,就可以了。然后在需要的时候调用AppManager的对应方法。


目录
相关文章
|
前端开发 JavaScript Android开发
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
121 0
|
存储 缓存 Java
鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
1297 0
鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
|
存储 Android开发
Activity的生命周期-典型情况下的生命周期
Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变;而异常情况下的生命周期是指Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建,异常情况下的生命周期的关注点和典型情况下略有不同。
571 0
Activity的生命周期-典型情况下的生命周期
|
存储 Android开发
【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
388 0
|
Android开发 开发者
【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )
【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )
463 0
|
监控 C#
C#通过“委托和事件”的方式实现进程监控并与“普通方式”对比
今天重新学习了一下观察者模式,对我的思路产生了启发。进程监控程序之前写过几个,这回换一种思路,改用委托和事件来实现。我已经用序号将关键的几步标注,方便大家理顺思路。代码如下: using System; using System.
930 0
C#通过“委托和事件”的方式实现进程监控并与“普通方式”对比
|
小程序
小程序 — 小程序生命周期及页面生命周期
前言:很多同学容易将小程序生命周期和页面的生命周期混淆为一起,这两个其实应该是不同却又相互关联的生命周期,所以,用实际代码操作并结合官方理论讲讲这个,好好捋捋。
1397 0
|
API Windows 程序员
如何在UWP中统一处理不同设备间的页面回退逻辑
原文:如何在UWP中统一处理不同设备间的页面回退逻辑       已经有一段时间没有写博客来记录自己的学习点滴了。现在回想起来确实有些惭愧,期间经历了一些事情,到目前为止算是平息了,是时候该收收心来充实自己了。
713 0
|
缓存 关系型数据库 数据库

热门文章

最新文章