Activity调用finish却不立即执行onDestory

一个场景,Activity A 开启 Activity B, 然后finish Activity B

这时候生命周期走向是 B onPause()-> A onRestart()-> A onStart() -> A onResume() - B onStop()-> B onDestroy()

那么onStop 和 onDestroy 回调可能会延时

  1. 延迟原因,B onPause之后,AMS会将B保存在需要finish的列表里,A onResume之后 注册一个IdleHandler(空闲处理器) 等待主线程轮训到,才会去调用B onStop onDestroy ,因为IdleHandler的优先级低,只有主线程消息执行完才会去执行,所以主线程消息过多也会使其延迟。

  2. 延迟10s原因,在B onPause之后,也会同步注册一个10s的延时消息,那么就算App在A onResume之后没有主动注册IdleHandler销毁Activity,这个延时的消息到时间后,也会执行销毁Activity的逻辑。


Activity.finish()

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

Activity.onDestory()

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


finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统回收机制自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值