Android(安卓)一键退出APP 实现
一键退出APP的思路: 关闭所有的Activity(不需要kill进程)
首先,创建一个activity管理类,代码如下:
/** * Activity管理器:用于Activity管理和应用程序退出 */public class ActivityCollector { public static List activities = new ArrayList<>(); public static void addActivity(Activity activity) { activities.add(activity); } public static void removeActivity(Activity activity) { activities.remove(activity); } public static void finishAllActivity() { for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } }}
然后,在所有Activity的共同父类(如:BaseActivity)的onCreate方法和onDestroy方法里,分别调用ActivityCollector.addActivity(this)方法和ActivityCollector.removeActivity(this)方法,代码如下:
/** * BaseActivity:所有的Activity都将继承这个类 */public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this);//每启动一个Activity,就将其加入到activity列表中 } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this);//当一个Activity调用onDestroy方法时,就将其从activity列表中删除 }}
最后,在需要一键退出APP的地方,调用ActivityCollector.finishAllActivity()方法即可。
注:
在网上看到很多说,退出APP要kill掉进程,通过调用 killProcess(android.os.Process.myPid()); 或者 System.exit(0); 方法, 我在ActivityCollector类的 finishAllActivity(); 方法的最后,添加了 killProcess(android.os.Process.myPid());方法后,运行APP,当调用 finishAllActivity(); 方法退出APP后,程序的进程是被kill掉了,但是过了一会儿后,又有新的进程产生; 调用System.exit(0);方法也是一样的。
其实,killProcess(android.os.Process.myPid()); 或 System.exit(0);方法都不应该直接调用, 进程是由系统底层进行管理的,android 系统会自己进行进程的处理回收:ActivityManager 一直监听着进程状态,如果发现进程被kill掉,会进行重启。正常情况下退出应用以后系统就会回收 app 进程, 但当 app 中有需要长时间运行的服务(比如消息推送)时系统就不会 kill 掉进程,即使我们手动 kill 掉进程, 进程也会自动重启。
所以,退出Android应用的话,finish掉所有的Activity即可。
更多相关文章
- Android(安卓)自定义Dialog,以及失去焦点之后,Dialog消失的解决
- Android(安卓)面试--请描述一下Activity的生命周期?
- Android(安卓)Handler 分析
- [Android]调用字符串资源的几种方法
- 【Android】ProcessRecord、ServiceRecord和ConnectionRecord
- android通过web service调用查询手机归属地代码
- Android应用推送角标设置方法
- Android6.0 设置默认输入法
- Android(安卓)- BroadcastReceiver