关于Activity调用finish却不立即执行onDestory的困惑

       最近在做一个项目时,碰到一个bug:在当前activity中注册广播接收器,接收到广播时做一些业务逻辑,而把注销广播接收器的方法写在onDestory中,当前activity调用finish方法后,偶尔还能接收到广播,即广播接收器没有被立即注销。

       经过查看项目代码,初步调查发现bug原因定位到:Activity调用finish却不立即执行onDestory方法,导致广播接收器没有被立即注销。以下是本人查看源码以及查找资料给出相应的解释,如有错误,望大家指正,更希望有人给出更专业的解释。


Activity.finish():
Callthis when your activity is done and should be closed. 
也就是说在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity(即当前的activity)移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的返回键时,也不会再找到这个Activity

Activity.onDestory():
Perform any final cleanup before an activity is destroyed. This can happeneither because the activity is finishing on it, or because the system istemporarily destroying this instance of the activity to save space.

Activity摧毁之前任何活动最终会被清理。这可以发生要么因为活动完成,或因为系统暂时销毁这个实例的活动来节省空间。

Activity的生命周期中,onDestory()方法是他生命的最后一步,当activity执行到这个生命周期时,也就意味着activity将会完全释放,资源空间等就被回收了。如果需要重新启动这个activity,必须重新创建,执行onCreate()方法。


System.exit(0):会将整个Application给干掉,退出进程。

*********************************************************************************************************************************

finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统回收机制自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。所以建议一些业务逻辑最好不要写在onDestory()方法中,可以写到比如onPause()方法中。

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值