关于android:如果App进程被杀死,bundle是如何发送到onCreate的?

How is bundle sent to onCreate if App process killed?

在活动生命周期图中,有一个箭头从"onstop"到"app process killed"到"oncreate"。我一直在想,现在我要做一个关于片段的小讨论;如果整个应用程序进程被破坏,OnCreate如何能够从OnStop接收捆绑包?系统是否跟踪被杀的应用程序及其活动包?我认为这就是它将如何做的,因为在那个时候,被杀死的应用程序将被零内存分配给它。

此外,从管理活动生命周期>启动活动页面的最后一段,"系统在除一个:…之外的所有情况下都调用了onPause()和onStop()之后调用OnDestroy(),并且其中一个情况没有说明内存不足。这让我觉得箭头永远不应该从OnStop转到OnCreate,因为"具有更高优先级的应用程序需要内存"。这是打字错误还是我读错了?我想我读错了,因为"可杀人"?"一般来说,活动生命周期中的移动如下:"图表。

其中一个必须是错误的,要么是活动生命周期图中的箭头,要么是"系统在除一个:…之外的所有情况下都调用了onPause()和onStop()之后调用OnDestroy()"。希望我是在断章取义。


How is it possible for onCreate to receive the bundle from onStop if the whole app process is destroyed?

它不"从顶层接收包",因为onStop()Bundle无关。交付给onCreate()onRestoreInstanceState()Bundle包含onSaveInstanceState()在早期Bundle中输入的数据。该Bundle的内容跨流程边界传递给一个核心操作系统流程,该流程管理未完成活动及其任务的状态。如果相关的话,这些内容将被传递回应用程序的新进程。

Does the system keep track of killed apps and their activity bundles?

操作系统跟踪未完成的任务。在一段时间内(自上次使用后约30分钟),它会跟踪实例状态Bundle,以跟踪任务上的活动。

The system calls onDestroy() after it has already called onPause() and onStop() in all situations except one

存在多个不调用onDestroy()的情况。由于内存不足而终止进程可能会或可能不会导致调用onDestroy(),这取决于系统RAM需求的紧迫性。


OnCreate很可能在onStop()之后调用。您可以使用onSaveInstanceState()传递包,该函数在活动或片段暂停或停止时调用。假设你有一个活动,然后按Home。同时调用OnStop和OnSaveInstanceState。在OnSaveInstanceState中,保存包以保存应用程序的状态。应用程序在后台的时间太长,因此被终止。然后,当您打开应用程序备份时,在savedinstancestate参数中,从onsaveInstanceState传递给oncreate的bundle将被重新创建。更多详情请参见官方文档https://developer.android.com/training/basics/activity-lifecycle/recreating.html