关于Android的Activity生命周期,我已经看到它广泛声称(在SO和其他地方)持久数据应该保存在onPause()方法中,因为无法保证onStop()将被调用,因为操作系统如果系统资源不足,可能需要终止活动以回收其资源。
然而,在我正在阅读的一本书中,反过来说:
实际上,操作系统不会回收可见(暂停或 恢复)>活动。 直到之后,活动才会被标记为“killable” 调用onStop()并完成执行。
[谈论被藏起来 状态和活动记录了一点]
请注意,您的活动可以在没有的情况下进入隐藏状态 正在调用onDestroy()。 您可以依赖onStop()和 调用onSaveInstanceState(Bundle)(除非事情已经消失 设备上可怕的错误... ... 覆盖onStop()以保存任何内容 永久数据,例如用户正在编辑的内容,因为您的 此方法返回后,任何时候都可能会杀死活动。
p70-71,Android编程:The Big Nerd Ranch Guide,3rd Edition (强调我的)
这是(在onStop()之前应用被杀的可能性 被称为某种不再是真实存在的东西 传播,还是这本书完全错了?
对某个活动可能被杀的时间或原因是否存在一些细微差别 答案“有时候?”
对于官方文件的参考将不胜感激。
答案 0 :(得分:4)
根据official Android documentation,
onPause()执行非常简短,并且不一定负担得起 有足够的时间执行保存操作。出于这个原因,你应该 不要使用 onPause()来保存应用程序或用户数据,制作网络 调用或执行数据库事务;这样的工作可能无法完成 在方法完成之前。相反,您应该执行重载 onStop()期间的关机操作。有关的更多信息 在onStop(),see onStop()期间执行的合适操作。
如果应用程序从onPause()
转到onCreate()
而没有onStop()
,并且onDestroy()
是另一个优先级较高的应用程序需要内存时,您会看到插图。
此外,可以在不调用onStart()
的情况下销毁活动,
在onStop()
see reference
finish()
方法时onCreate()