关于Android开发中使用System.exit(0)的问题(如写返回键响应时用到双击退出函数的时候)

       最近整理项目的时候发现一个问题:在一种情况下我双击退出应用时调用了finish()和System.exit(0),但是事实上应用在关闭后又重启了。也是由于这个问题一般不去折腾也不会发现所以之前也没考略到

      项目的需求是这样的:首次安装应用时进行登陆操作,登陆完成后进入首页,在首页有个判断是否有数据(这个项目有离线的功能,数据是定期自动同步加手动同步的),首次登陆肯定还没有同步也没有数据,所以自动跳到同步的页面,这时如果里点了同步就万事大吉没任何问题,如果没有点击同步想退出是需要点退出登录的,退出登录的是否就回到登陆页面了,这时候再次双击返回键出现问题:应用关闭后又重启进入了同步页面,如果任然不同步就一直循环。

       当初对于System.exit(0)的理解也不是很全面一直认为调用了这个app就该退出了,事实上还是存在问题的。

       System.exit(0)是将你的整个虚拟机里的内容都停掉了,而finish()只是退出了activity,并没有退出应用,Application还是存在于内存中的,除非被系统回收。无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西。关于finished与System.out的区别,请参考:http://blog.sina.com.cn/s/blog_48e2ea3401017m3f.html。
       System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序。

       看了这里感觉还是没问题啊为什么会退出后又重启呢?关键来了。

       如果是在第一个 Activity 调用 Process.killProcess 或 System.exit(0) 都会 kill 掉当前进程。但是如果不是在第一个 Activity 中调用,但是如果不在第一个 Activity 中调用Process.killProcess 或 System.exit(0) 当前进程确实也被 kill 掉了,但 app 会重新启动,又创建了一个新的进程。

       这就是出现问题的原因,项目中登陆成功后首先进入的是首页,由于没有数据才自动跳到同步页面,这时回退栈中存在首页和同步页(登陆页面finnish掉了),在同步页退出登录时只finish()了当前页面然后开启了登陆页,此时首页任然存在回退栈中,这时候调用System.exit(0)自然就出现问题了。

       解决办法有很多也很简单我的方法是在同步页退出登录时用finishAffinity()关闭当前activity所在栈中的所有的activity



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一生之约

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值