自定义AppManager管理所有的activity
16lz
2021-01-24
我们在项目中会经常遇到需要退出程序,关闭某一个Activity的需求,如果不事先定义好,退出activity将会很麻烦,相信你们在网上也寻找到过很多退出activity的方法,大多都不能很好的退出我们的activity。今天我为大家介绍一下如何定义一个AppManager,来达到退出我们的activity。
首先呢,我先介绍一个java类,java.util.Stack任务栈。我们在程序中会用到,Static遵循后进先出的原则压站,也就是栈顶的先出。Stack
类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类Vector进行了扩展 ,允许将向量视为堆栈。它提供了通常的push和pop操作,以及取堆栈顶点的peek方法、测试堆栈是否为空的empty方法、在堆栈中查找项并确定到堆栈顶距离的search方法。API文档及示意图如下所示。
好了,这个理解了之后,下面就是我们定义的管理类了,代码如下所示。
package com.meijianfang.tool;import java.util.Stack;import android.app.Activity;import android.app.ActivityManager;import android.content.Context;/** **************************************** * @author * @Description: 这是一个管理Activity的类,可以对项目中Activity的生命周期进行管理, * 达到安全退出的目的; * @date 2016-3-7 下午3:30:52 ***************************************** */public class AppManager {private static Stack<Activity> activityStack;private static AppManager instance;private AppManager(){}/** * 单一实例 */public static AppManager getAppManager(){if(instance==null){instance=new AppManager();}return instance;}/** * 添加Activity到堆栈中 */public void addActivity(Activity activity){if(activityStack==null){activityStack=new Stack<Activity>();}activityStack.add(activity);}/** * 获取当前Activity(堆栈中最后压入的) */public Activity currentActivity(){Activity activity=activityStack.lastElement();return activity;}/** * 结束当前Activity(堆栈中最后压入的) */public void finishActivity(){Activity activity=activityStack.lastElement();finishActivity(activity);}/** * 结束指定的Activity */public void finishActivity(Activity activity){if(activity!=null){activityStack.remove(activity);activity.finish();activity=null;}}/** * 结束指定类名的Activity */public void finishActivity(Class<?> cls){for (Activity activity : activityStack) {if(activity.getClass().equals(cls) ){finishActivity(activity);}}}/** * 结束所有Activity */public void finishAllActivity(){for (int i = 0, size = activityStack.size(); i < size; i++){ if (null != activityStack.get(i)){ activityStack.get(i).finish(); } }activityStack.clear();}/** * 彻底退出应用程序,安全退出 * */public void AppExit(Context context) {try {finishAllActivity();/**这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed所有创建的服务会停止,还会发一个广播 Intent.ACTION_PACKAGE_RESTARTED 导致所有注册alarms被stopped, notifications 被removed。但是在Android 2.2中新增了一个API可以帮助我们杀死后台进程(Android2.3再次强调其调用的API Level最小为8)killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为3,但是SDK中已经标记为deprecated,其实他们的原理都是一样的*/ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);//activityMgr.restartPackage(context.getPackageName());activityMgr.killBackgroundProcesses("com.meijianfang");//终止虚拟机System.exit(0);//杀死进程android.os.Process.killProcess(android.os.Process.myPid());} catch (Exception e) {}}}最后在我们的Activity中来使用我们定义的类。在我们的onCreate方法中使用 AppManager.getAppManager().addActivity()方法将我们的activity压入栈内。
更多相关文章
- Android学习路线的归纳总结
- Android提高十八篇之自定义Menu(TabMenu)
- android 自定义dialog的实现(自定义大小、去除黑色边框等)
- Handler 源码解析——Handler的创建
- Android通过ant脚本打包带Library project的方法
- Android自定义进度条颜色
- 深入分析安卓(Android)中的注解
- android之通过USB插拔流程来了解android UEvent
- Android(安卓)之 使用SoundPool播放音频