当我通过 Intent BundleExtra 创建 Activity 时,我将布尔值传递给它。现在查看活动生命周期,如果我的活动停止(onStop
),那么另一个应用程序需要内存,因此应用程序进程被终止,然后用户导航到活动(onCreate
)。最后一个 onCreate 会包含我通过的原始布尔值吗?我假设如果我想保存该布尔值,我需要将它保存在 中OnSaveInstanceState
,对吗?
3 回答
实际上,当您的活动重新创建时,仍会使用原始意图。 getIntent()
将返回与首次创建时相同的意图。但是,如果您有其他数据要在重新创建活动时保留,则需要使用saveInstanceState()
. 您可以通过简单地旋转设备并运行活动来验证这一点,因为它将以相同的意图被销毁和重新创建。有关详细信息,请参阅此处。
出于这个原因,我会使用 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 = 如果没有保存就消失:)
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);