我们可以依赖onStop()吗?

时间:2017-11-17 22:56:11

标签: android android-lifecycle activity-lifecycle

关于Android的Activity生命周期,我已经看到它广泛声称(在SO和其他地方)持久数据应该保存在onPause()方法中,因为无法保证onStop()将被调用,因为操作系统如果系统资源不足,可能需要终止活动以回收其资源。

然而,在我正在阅读的一本书中,反过来说:

  

实际上,操作系统不会回收可见(暂停或   恢复)>活动。 直到之后,活动才会被标记为“killable”   调用onStop()并完成执行。

     

[谈论被藏起来   状态和活动记录了一点]

     

请注意,您的活动可以在没有的情况下进入隐藏状态   正在调用onDestroy()。 您可以依赖onStop()和   调用onSaveInstanceState(Bundle)(除非事情已经消失   设备上可怕的错误... ... 覆盖onStop()以保存任何内容   永久数据,例如用户正在编辑的内容,因为您的   此方法返回后,任何时候都可能会杀死活动。

     

p70-71,Android编程:The Big Nerd Ranch Guide,3rd Edition   (强调我的)


多部分问题:

  • 这是(在onStop()之前应用被杀的可能性 被称为某种不再是真实存在的东西 传播,还是这本书完全错了?

  • 对某个活动可能被杀的时间或原因是否存在一些细微差别 答案“有时候?”

  • 如果这本书是正确的,为什么这种误解会如此广泛传播? (例如Hereherehere.

对于官方文件的参考将不胜感激。

1 个答案:

答案 0 :(得分:4)

这是活动生命周期的说明: enter image description here

根据official Android documentation

  

onPause()执行非常简短,并且不一定负担得起   有足够的时间执行保存操作。出于这个原因,你应该   不要使用 onPause()来保存应用程序或用户数据,制作网络   调用或执行数据库事务;这样的工作可能无法完成   在方法完成之前。相反,您应该执行重载    onStop()期间的关机操作。有关的更多信息   在onStop(),see onStop()期间执行的合适操作。

如果应用程序从onPause()转到onCreate()而没有onStop(),并且onDestroy()是另一个优先级较高的应用程序需要内存时,您会看到插图。

此外,可以在不调用onStart()的情况下销毁活动,    在onStop() see reference

上致电finish()方法时onCreate()