它现在是2018年 - 活动onStop可以杀死(不保证被叫)

时间:2018-02-07 21:49:17

标签: android

现在是2018年。

我一直在onPause而非onStop期间保存我的应用数据,因为我坚信onStop不能保证被调用。

来源:https://developer.android.com/reference/android/app/Activity.html

enter image description here

  

对于那些被标记为可填充的方法,在该方法之后   返回托管活动的进程可能被系统杀死   在任何时候都没有执行其代码的另一行。因为   对此,您应该使用onPause()方法来编写任何持久性   数据(例如用户编辑)到存储。

基本上,表格告诉

  1. 对于蜂窝及以上设备,onPause不可用。保证被召唤。
  2. 对于所有设备,onStop都是可以播放的。 保证被调用。
  3. 但是,在桌子下面,另一行文字打破了我的坚定信念。

      

    从Honeycomb开始,应用程序不处于可充电状态   直到它的onStop()返回。

    我多次读同一个句子。这意味着onStop不可杀??这有些与上表信息相反。

    进一步阅读

    我读了https://developer.android.com/guide/components/activities/activity-lifecycle.html#onpause以找出真相

      

    因此,您不应使用onPause()来保存应用程序或   用户数据,进行网络呼叫或执行数据库事务;这样   在方法完成之前,工作可能无法完成。相反,你应该   在onStop()期间执行重载关闭操作。

    它建议我们在onStop期间保存应用程序数据。这是否意味着总是调用onStop

    我的问题是

    1. 是否始终调用onStop? (适用于Android 4及更高版本)
    2. 应在onPauseonStop
    3. 期间执行应用程序数据保存操作

2 个答案:

答案 0 :(得分:1)

您误读了文档表和/或其后的代码段。

  

对于标记为可填充的方法,在该方法返回之后,系统可能会终止托管该活动的进程

onPause()被标记为可预留的Honeycomb,并且onStop()被标记为可用于所有API级别的Killable。所以这意味着预蜂窝,你的应用程序在onPause()之后可以使用,而在Honeycomb +上你的应用程序在onStop()之后可以使用。这就是他们说

的原因
  

从Honeycomb开始,应用程序在返回onStop()之前不处于killable状态。

答案 1 :(得分:0)

除非应用程序崩溃,否则将始终调用onStop。