Android 如果某个活动停止,则重新创建传递到getIntent()的内容

Android 如果某个活动停止,则重新创建传递到getIntent()的内容,android,android-intent,Android,Android Intent,当我通过Intent BundleExtra创建活动时,我将布尔值传递给它。现在来看,如果我的活动停止(onStop),那么另一个应用程序需要内存,因此应用程序进程被终止,然后用户导航到该活动(onCreate)。最后一个onCreate是否包含我传递的原始布尔值?我假设如果我想保存布尔值,我需要将其保存在OnSaveInstanceState,对吗?出于这个原因,我会使用onPause()(来自文档) 请注意,在onPause()中保存持久数据很重要 属于onSaveInstanceState

当我通过Intent BundleExtra创建活动时,我将布尔值传递给它。现在来看,如果我的活动停止(
onStop
),那么另一个应用程序需要内存,因此应用程序进程被终止,然后用户导航到该活动(
onCreate
)。最后一个onCreate是否包含我传递的原始布尔值?我假设如果我想保存布尔值,我需要将其保存在
OnSaveInstanceState
,对吗?

出于这个原因,我会使用onPause()(来自文档)

请注意,在onPause()中保存持久数据很重要 属于onSaveInstanceState(捆绑),因为后者不是 生命周期回调,因此不会在每种情况下都像 在其文档中描述

然后在
onCreate()
中再次读取,例如从数据库或存储它的其他资源中读取

所以,根据布尔值的重要性,您将使用所需的保存机制。。对于持久状态:

对于简单文本等UI状态,选择使用如下所述的
onSaveInstanceState


作为总结:进程终止时布尔值=消失如果未保存:)

Mauno V.是正确的,在您的情况下,您必须使用onPause()

事实上,onSaveInstanceState(Bundle Bundle)旨在保存当前实例中的状态。因此,当您的应用程序被终止时,保存的捆绑包也会被终止

您可以使用SharedReferences保存布尔值:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit();
并在onCreate上检索它:

Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true);

实际上,当重新创建活动时,仍将使用原始意图
getIntent()
将返回与首次创建时相同的意图。但是,如果要在重新创建活动时保留其他数据,则需要使用
saveInstanceState()
保存它。您可以通过在活动运行时简单地旋转设备来验证这一点,因为它将以相同的目的被销毁和重新创建。有关更多信息,请参阅。

perfect。作为一个总结,这正是我想要的。实际上,我希望布尔值消失,这样我就可以跟踪从何处调用onCreate。这是不正确的。当托管应用程序的进程将被终止时,“保存实例状态包”将由ActivityManager保留,并在用户导航到应用程序时传回。Android将创建一个进程并实例化应用程序,然后创建位于堆栈顶部的活动,然后传入最后保存的实例状态包。早些时候,这个捆绑包无法在设备重新启动时保存,但是Android正在一天比一天强大,并且开始了sdk级别21,这个捆绑包也可以在设备重新启动时保存。