2012-08-24 30 views
5

当我通过Intent BundleExtra创建它时,我将一个布尔值传递给我的Activity。现在查看activity lifecycle,如果我的活动停止(onStop),则其他应用程序需要内存,以便应用程序进程终止,然后用户导航到活动(onCreate)。最后一个onCreate是否包含我通过的原始布尔值?我会假设如果我想要保存布尔值,我需要将它保存在OnSaveInstanceState,对吗?如果一个活动停止,然后重新创建getIntent()

回答

2

我会使用的onPause()因为这个原因(从文档)

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

然后再读回onCreate()例如,从数据库或其他一些资源,你保存它

所以这取决于如何重要的是布尔值,你会使用你想要保存机制。对于持续状态:http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

而对于UI状态,如简单的文章,选择使用onSaveInstanceState喜欢这里描述:Saving Android Activity state using Save Instance State

作为总结:当进程杀死布尔=不见了如果不保存 :)

+0

完美。作为一个总结正是我所期待的。我实际上希望布尔值不在,所以我可以跟踪从 – jsb

1

马uno V.是正确的,在你的情况下,你必须使用onPause()

事实上,onSaveInstanceState(Bundle bundle)旨在保存当前实例中的状态。所以,当你的应用程序被杀害,保存的包太

您可以使用SharedPreferences保存您的布尔:

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

和检索它在你的onCreate:

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

调用onCreate的位置。这是不正确的。当托管您的应用程序的进程将被终止时,“保存实例状态包”将由ActivityManager保留,并在用户导航到您的应用程序时传回。 Android将创建一个进程并实例化应用程序,然后创建位于堆栈顶部的活动,然后传入上次保存的实例状态包。早些时候,这个软件包无法在设备重启时保存,但Android一天天变得非常棒,并开始sdk级别21,该软件包在重新启动时也保留下来。 –

3

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

相关问题