我知道这个问题已经被问过一百万次了,尽管我自己已经知道答案,而且正确的答案是唯一有保证的调用是 onPause(),所以你应该把你的数据保存在那里。
然而,在许多 android 文档的地方,他们总是建议不要在 onPause() 方法中做繁重的工作(例如在数据库中写入数据),因为它会延迟活动之间的转换。
onPause():此方法通常用于提交对持久数据的未保存更改、停止动画和其他可能消耗 CPU 的事情等。它应该很快地做任何事情,因为下一个活动在它返回之前不会恢复。
可杀:是
然后根据类似表格中的 Android Developer Reference Guide 进行操作。
它说的是同样的事情,但是:
可杀:预蜂巢
他们添加了一个小注释,上面写着:
请注意,这些语义将在针对以 HONEYCOMB 开头的平台的应用程序与针对先前平台的应用程序之间略有不同。从 Honeycomb 开始,应用程序在其 onStop() 返回之前不会处于可终止状态。这会影响何时可以调用 onSaveInstanceState(Bundle)(它可以在 onPause() 之后安全地调用,并允许应用程序安全地等到 onStop() 以保存持久状态。
可杀
请注意上表中的“Killable”列——对于那些被标记为可终止的方法,在该方法返回后,托管该活动的进程可能随时被系统终止,而无需执行另一行代码。
FOR POST-HONEYCOMB(我不关心早期版本): 那么,可以假设任何 Android 设备(包括不同的 ROMS)都会确保在活动中调用 onStop 吗?这是进行任何耗时的应用程序存储写入的最佳场所吗?
注意:这非常令人困惑,因为这里的大多数答案、网站、书籍甚至在线 android 测试都将其作为正确答案,您应该将其保存在 onPause 而不是 onStop 中。