在活动生命周期图中,有一个从'onStop'到'App process killed'到'onCreate'的箭头。我一直在想,现在我要谈谈片段;如果整个应用程序进程被销毁,onCreate如何从onStop接收捆绑包?系统是否跟踪被杀死的应用及其活动包?我认为这将是它如何做到的,因为在那一点上被杀死的应用程序将分配零内存。
此外,从管理活动生命周期>开始活动的页面的最后一段开始,“系统调用onDestroy()之后,除了一个以外的所有情况都调用了onPause()和onStop():...”而且这种情况并没有说明内存不足。这让我认为箭头永远不会从onStop变为onCreate,因为'优先级较高的应用程序需要内存'。这是错字还是我读错了?我认为我读错了因为'Killable?'一般来说,通过活动生命周期的移动看起来像这样:'图表。
其中一个必须是错误的活动生命周期图表中的箭头或“系统调用onDestroy()之后它已经在所有情况下调用onPause()和onStop(),除了一个:...”语句。希望我读完背景。
答案 0 :(得分:4)
如果整个应用程序进程被销毁,onCreate如何从onStop接收捆绑包?
在onStop()
与Bundle
无关的情况下,它不会从onStop"接收捆绑包。传递给Bundle
和onCreate()
的{{1}}包含onRestoreInstanceState()
之前Bundle
的数据。该onSaveInstanceState()
的内容通过进程边界传递给核心OS进程,该进程管理未完成活动及其任务的状态。如果相关的话,该内容会被传递回您应用的新流程。
系统是否会跟踪已杀死的应用及其活动包?
操作系统会跟踪未完成的任务。有一段时间(自上次使用以来约30分钟),它会跟踪任务活动的实例状态Bundle
。
系统在除了一个
之外的所有情况下调用onPause()和onStop()之后调用onDestroy()
有多种情况不会调用Bundle
。由于内存条件较低而终止进程可能会或可能不会导致onDestroy()
被调用,具体取决于系统RAM需求的紧迫性。
答案 1 :(得分:1)
onCreate很可能在onStop()之后被调用。使用onSaveInstanceState()传递bundle,只要活动或片段暂停或停止,就会调用它。假设您有活动并按回家。 OnStop和onSaveInstanceState都被调用。在onSaveInstanceState中,您可以保存包以保存应用程序的状态。该应用程序然后被杀死,因为它在后台太长时间了。然后当你打开应用程序备份时,onSaveInstanceState中的bundle会在重新创建时传递给SavedInstanceState参数中的oncreate。有关更多https://developer.android.com/training/basics/activity-lifecycle/recreating.html
的更多信息,请参阅官方文档