5

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

4

3 回答 3

5

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

于 2015-06-05T12:32:15.323 回答
2

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

请注意,将持久数据保存在 onPause() 而不是 onSaveInstanceState(Bundle) 中很重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的所有情况下都被调用。

onCreate()然后从数据库或您存储它的其他资源中再次读取它。

因此,根据布尔值的重要性,您将使用所需的保存机制..用于持久状态:http: //developer.android.com/reference/android/app/Activity.html#SavingPersistentState

对于简单文本等 UI 状态,选择使用onSaveInstanceState如下所述:Saving Android Activity state using Save Instance State

总结一下:当进程终止时 boolean = 如果没有保存就消失:)

于 2012-08-24T14:37:59.283 回答
1

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

事实是 onSaveInstanceState(Bundle bundle) 旨在保存当前实例中的状态。因此,当您的应用程序被杀死时,保存的包也会

您可以使用 SharedPreferences 来保存您的 boolean :

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit();

并在您的 onCreate 上检索它:

Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true);
于 2012-08-24T14:53:54.923 回答