Android:在Android生命周期中保存状态

我是指http://developer.android.com/reference/android/app/Activity.html。 我有一个可以被用户“中断”的活动,例如用户打开菜单以调用首选项屏幕。调用首选项屏幕时,调用
onSaveInstanceState(Bundle)
,我可以保存我的数据。到目前为止这很好。但按下后退按钮
onRestoreInstanceState(Bundle savedInstanceState)
不会被调用。 那么如何保存我的州?在调用新活动时我是否必须这样做?但是怎么样? 我能想到的唯一方法是通过将状态传递给新活动来保存状态,不使用保存的数据执行任何操作,将其返回到第一个活动并在
onActivitResult
中恢复状态。但这意味着我必须来回传递数据才能恢复状态。似乎不是一个很好的解决方案。     
已邀请:
可能是一个糟糕的答案,但你确定需要调用吗? 捆绑点和
onSaveInstanceState
/
onCreate
与bundle /
onRestoreInstanceState
是为了保存历史堆栈中的活动的瞬态数据,以防必须杀死活动以回收某些内存。如果它被杀死,活动可以通过
onCreate / onRestonreInstanceState
恢复,好像它从未被杀死一样。但是,如果活动没有被杀死,则可能不需要恢复其瞬态数据 - 可能是它就像它一样。 Android文档小心地指出
onSaveInstanceStae / onRestoreInstanceState
不是生命周期方法,因此不能保证在生命周期状态转换期间调用它们。如果需要挂钩某些生命周期转换,请查看生命周期钩子方法。例如,当活动变为前景活动时调用
onResume
,当不再是前景活动时调用
onPause
。     
看看应用程序基础知识,特别是这部分:   与
onPause()
和前面讨论的其他方法不同,
onSaveInstanceState()
onRestoreInstanceState()
不是生命周期方法。它们并不总是被称为。例如,Android在活动变得容易被系统破坏之前调用
onSaveInstanceState()
,但是当实例被用户操作实际销毁时(例如按BACK键),它不会打扰它。在这种情况下,用户不会期望返回活动,因此没有理由保存其状态。      因为并不总是调用
onSaveInstanceState()
,所以应该仅使用它来记录活动的瞬态,而不是存储持久数据。改为使用
onPause()
。 基本上,任何持久性数据都应该用
onPause()
方法写出,并在
onResume()
中读回。查看数据存储文章,了解如何保存数据。     
从Pref屏幕返回后不应清除ListView,除非在Pref屏幕显示时销毁了Activity(在这种情况下应该使用保存的bundle调用onCreate)。 savedInstanceState仅在Activity被销毁并需要重新创建时使用。在这种情况下,看起来您的ListActivity尚未被销毁。 您是否在某处手动清除ListView?     

要回复问题请先登录注册