我们在项目中会经常遇到需要退出程序,关闭某一个Activity的需求,如果不事先定义好,退出activity将会很麻烦,相信你们在网上也寻找到过很多退出activity的方法,大多都不能很好的退出我们的activity。今天我为大家介绍一下如何定义一个AppManager,来达到退出我们的activity。

首先呢,我先介绍一个java类,java.util.Stack任务栈。我们在程序中会用到,Static遵循后进先出的原则压站,也就是栈顶的先出。Stack类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类Vector进行了扩展 ,允许将向量视为堆栈。它提供了通常的pushpop操作,以及取堆栈顶点的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压入栈内。

更多相关文章

  1. Android学习路线的归纳总结
  2. Android提高十八篇之自定义Menu(TabMenu)
  3. android 自定义dialog的实现(自定义大小、去除黑色边框等)
  4. Handler 源码解析——Handler的创建
  5. Android通过ant脚本打包带Library project的方法
  6. Android自定义进度条颜色
  7. 深入分析安卓(Android)中的注解
  8. android之通过USB插拔流程来了解android UEvent
  9. Android(安卓)之 使用SoundPool播放音频

随机推荐

  1. Android代码内存优化建议-Android资源篇
  2. Android守护进程
  3. Android:使用VideoView(TV显示屏待机状态,循
  4. Android中Handler与Message的简单实例
  5. 为Android添加一门新语言
  6. TextView文字阴影效果以及styles文件的使
  7. 使用nginx配置android文档本地站点
  8. Android Google Map实例 - 在地图和卫星
  9. Ubuntu 14.04 LTS 安装 文泉驿微米黑 字
  10. WebView项目中PhoneGap插件使用细节start