Android 如果应用程序进程被终止,如何将bundle发送到onCreate?

Android 如果应用程序进程被终止,如何将bundle发送到onCreate?,android,activity-lifecycle,Android,Activity Lifecycle,在活动生命周期图中,有一个从“onStop”到“AppProcessKilled”再到“onCreate”的箭头。我一直在想,现在我要做一个关于碎片的小报告;如果整个应用程序进程被破坏,onCreate如何从onStop接收捆绑包?系统是否跟踪被终止的应用程序及其活动包?我认为这就是它应该如何做的,因为在这一点上,被杀死的应用程序将没有分配给它的内存 另外,从“管理活动生命周期>启动活动”页面的最后一段开始,“系统在调用onPause()和onStop()之后调用onDestroy()在除一种情

在活动生命周期图中,有一个从“onStop”到“AppProcessKilled”再到“onCreate”的箭头。我一直在想,现在我要做一个关于碎片的小报告;如果整个应用程序进程被破坏,onCreate如何从onStop接收捆绑包?系统是否跟踪被终止的应用程序及其活动包?我认为这就是它应该如何做的,因为在这一点上,被杀死的应用程序将没有分配给它的内存

另外,从“管理活动生命周期>启动活动”页面的最后一段开始,“系统在调用onPause()和onStop()之后调用onDestroy()在除一种情况外的所有情况下:…”并且有一种情况并不是说内存不足。这让我认为,箭头永远不应该从顶部转到另一个顶部,因为“具有更高优先级的应用程序需要内存”。这是一个打字错误还是我读错了?我假设我读错了,因为“一般来说,mov”中的“Killable”列活动生命周期中的所有活动如下图所示


其中一个肯定是错误的,要么是活动生命周期图中的箭头,要么是“系统在所有情况下调用onPause()和onStop()后调用onDestroy(),除了一个:…”语句。希望我是断章取义。

onStop()之后调用onCreate是很有可能的。使用onSaveInstanceState()传递捆绑包在活动或片段暂停或停止时调用。假设您有一个活动,然后按home。OnStop和onSaveInstanceState都会被调用。在onSaveInstanceState中,您保存捆绑包以保存应用程序的状态。然后,该应用程序会被终止,因为它在后台的时间太长。然后,当您打开应用程序时,会从m onSaveInstanceState在重新创建时会在SavedInstanceState参数中传递给oncreate。有关详细信息,请参阅官方文档

如果整个应用程序进程被破坏,onCreate如何从onStop接收捆绑包

它不会“从onStop接收捆绑包”,因为
onStop()
捆绑包
无关。交付到
onCreate()
onRestoreInstanceState()
捆绑包
包含
onSaveInstanceState()放在早期
捆绑包中的数据
。该
捆绑包的内容将跨流程边界传递给核心操作系统流程,该流程管理未完成活动及其任务的状态。如果相关,则该内容将传递回应用程序的新流程

系统是否跟踪被终止的应用程序及其活动包

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

系统在除一种情况外的所有情况下都调用了onPause()和onStop()之后,才会调用onDestroy()


有多种情况下未调用
ondestory()
。由于内存不足而终止进程可能会或可能不会导致
ondestory()
被调用,这取决于对系统RAM的需求的紧迫性。

不调用ondestroy的主要方式是当您按下home键将其置于后台,然后用户从应用程序手动将其杀死manager@TomerShemesh:
onDestroy()
在这种情况下仍可能被调用。这取决于“应用程序管理器”的功能”“是的。作为Android和第三方任务管理器的一部分,最近的任务列表/概览屏幕仍然会导致调用
onDestroy()
。但是,设置中的“强制停止”和一些预安装的任务管理器(不幸的是)会执行“强制停止”操作,它们将在不调用
onDestroy()
的情况下终止进程。您是对的,这应该是正确的,但我有一段时间没有调用def“有一段时间(上次使用约30分钟),它…”我记录了一个int值(intent.getIntExtra)我在onCreate方法中将一个捆绑包传递给当前活动。然后我运行七到八个应用程序,直到操作系统终止我的当前活动。我等待了大约一个半小时。之后我将我的应用程序带到前台,我看到捆绑包仍然有价值。这是否意味着捆绑包会一直保存到用户关闭应用程序为止?@Arash:“直到操作系统杀死我当前的活动”--操作系统不会杀死活动。它会终止进程。“这是否意味着捆绑包会一直保存到用户关闭应用程序?”--我不会这么认为。感谢您让我访问开发人员的网站“开发>培训>重新创建活动”。它确实有一句非常有用的话(在其他有用的句子中)“…然后,尽管实际的活动实例已不存在,但系统会记住它的存在,因此,如果用户导航回它,系统将使用一组保存的数据创建活动的新实例”