![](/img/trans.png)
[英]Why Toast keeps showing even when the app called onDestroy()?
[英]why is onDestroy() called when switching to another app
好的,我已经阅读了有关 Activity 生命周期的部分,但仍有一些我不明白的地方。 为什么在我的应用程序中调用onDestroy()
,当我切换到手机上运行的另一个应用程序时,或者当我点击主页按钮时。
从我读到的,当应用程序失去焦点时会调用onPause()
。
系统调用此方法作为用户离开您的活动的第一个指示(尽管这并不总是意味着活动正在被销毁); 它表明活动不再在前台(尽管如果用户处于多窗口模式它可能仍然可见)。 使用 onPause() 方法暂停或调整在 Activity 处于暂停状态时不应继续(或应适度继续)的操作,并且您希望很快恢复。
OnStop()
我也得到:
当您的 Activity 不再对用户可见时,它就进入了 Stopped 状态,系统会调用 onStop() 回调。 例如,当新启动的活动覆盖整个屏幕时,可能会发生这种情况。 当 Activity 已完成运行并且即将终止时,系统也可能会调用 onStop()。
但是,我不明白为什么onDestroy()
也会被调用。
onDestroy() 在活动被销毁之前被调用。 系统调用此回调的原因可能是:1) 活动正在完成(由于用户完全关闭活动或由于在活动上调用了 finish()),或 2) 由于配置,系统正在临时销毁活动更改(例如设备旋转或多窗口模式)。
首先,我没有完成我的应用程序,也没有调用finish()
。 其次,我知道没有配置更改。
希望有人能帮忙。
仅供参考:我的应用程序扩展Activity
,使用多个Threads
,有一个扩展SurfaceView
并实现SurfaceHolder.Callback
,使用IntentService
和ContentProvider
。 除此之外,没有什么特别的。
PS:当我关闭屏幕时,不会调用onDestroy()
。
PPS:我不是在寻找有异味的解决方法。 我想了解正在发生的事情以及原因。
事实证明,我在清单中使用了android:noHistory
标志。 感谢这篇文章,我能够解决我的问题。 谢谢@Alexis Contour!
我不确定这会有所帮助,但据我所知,当 Android 内存不足时,它会自动运行屏幕上不可见的任何 Activity 的 onDestory 方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.