您的位置:首页 > 移动开发

如何真正的退出Android App

2016-03-22 10:03 344 查看

如何真正的退出Android App

1.问题导入

笔者近期为了准备暑假的实习,在写项目,写项目的过程中遇到了一个莫名其妙的问题,检查到最后发现是“程序退出后”再次启动之后,原有的静态变量没有重新被初始化,也就是说进程并没有真正的被杀死。如果你定义一个变量,在逻辑中有增加的业务(初值为0,增加至10),如果你不能妥当的退出程序,那么再次启动时,如果这个进程没有被系统因为资源不足而杀死,那么它将仍然是10。想到这里,我不禁一阵冷汗,幸好及时发现这个大坑,同时我也想起了每次“应用退出后”logcat的依旧疯狂打印。

2.错误的解决的方案

笔者在发现这个严重的问题后,开始了铺天盖地的百度,发现有4中方案,但是笔者发现这四种方案,都不能解决这个问题。

使用 System.exit(0);

使用android.os.Process.killProcess(android.os.Process.myPid());

((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE)).restartPackage(getPackageName());


使用此方法系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上响应的权限.

使用全局的数据结构管理所有打开的Activity,在退出应用时退出所有Activity

然而以上4种方案都有着很大的问题和局限性:

方案一:只能结束自己和自己的上一个Activity,如果只有这两个Activity的话,此方法可以成功结束进程。

方案二:和方案一一样

方案三:需要权限,而且笔者在AndroidStudio上使用的时候发现Google并不建议使用。并且笔者没有成功的实现它的功能。

方案四:杀掉所有Activity后进程仍然活着,logcat仍然在不停地打印。


3.正确的退出方法

其实读到这里,相信聪明的你们一定猜到了我的方法是什么,没错,那就是——方案四与方案一的结合体。

先退出所有Activity,然后System.exit。经笔者验证此方法可行。



4.一点儿猜想

Google之所以把安卓应用的退出搞得这么复杂,其原因是否时Google从未想过让我们退出应用,而让其在后台缓存,当我们再次启动的时候直接从内存读取,其速度相当可观,如果资源不够的时候系统会自动将其杀掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: