Android:在Android生命周期中保存状态
我指的是 我有一个用户可以“中断”的活动,例如,用户打开菜单调用首选项屏幕。调用首选项屏幕时,会调用SaveInstanceState(Bundle),我可以保存数据。到目前为止还可以。但按下后退按钮时,不会调用恢复安装状态(Bundle savedInstanceState) 那么我怎样才能拯救我的国家呢?我在调用新活动时必须这样做吗?但是怎么做呢?Android:在Android生命周期中保存状态,android,android-activity,state,Android,Android Activity,State,我指的是 我有一个用户可以“中断”的活动,例如,用户打开菜单调用首选项屏幕。调用首选项屏幕时,会调用SaveInstanceState(Bundle),我可以保存数据。到目前为止还可以。但按下后退按钮时,不会调用恢复安装状态(Bundle savedInstanceState) 那么我怎样才能拯救我的国家呢?我在调用新活动时必须这样做吗?但是怎么做呢? 我能想到的唯一方法是通过将状态传递给新活动来保存状态,对保存的数据不做任何处理,将其返回到第一个活动,并在ActivitResult中还原状态。
我能想到的唯一方法是通过将状态传递给新活动来保存状态,对保存的数据不做任何处理,将其返回到第一个活动,并在ActivitResult中还原状态。但这意味着我必须来回传递数据才能恢复状态。这似乎不是一个很好的解决方案。看看,特别是这一部分: 与前面讨论的
onPause()
和其他方法不同,onSaveInstanceState()
和onRestoreInstanceState()
不是生命周期方法。他们并不总是被叫来。例如,Android在活动变得容易被系统破坏之前调用onSaveInstanceState()
,但在实例实际被用户操作破坏时(如按后退键)不调用它。在这种情况下,用户不希望返回活动,因此没有理由保存其状态
因为不总是调用onSaveInstanceState()
,所以您应该只使用它来记录活动的瞬时状态,而不是存储持久数据。为此,请使用onPause()
基本上,任何持久数据都应该在
onPause()
方法中写出,然后在onResume()中读回。查看这篇文章以了解保存数据的方法。可能是个错误的答案,但您确定需要调用onrestoreinnstancestate
bundle和带有bundle/onRestoreInstanceState的onSaveInstanceState
/onCreate
的bundle和onRestoreInstanceState
的要点是保存历史堆栈中某个活动的临时数据,以防必须终止该活动以回收一些内存。如果活动被终止,则可以通过onCreate/onRestonreInstanceState
恢复该活动,就像它从未被终止一样但是,如果活动未被终止,则可能不需要恢复其瞬态数据-可能与原来一样。
Android文档小心地指出,onSaveInstanceStae/onRestoreInstanceState
是,因此不保证在生命周期状态转换期间被调用。如果您需要连接到特定的生命周期转换,请查看。例如,当活动变为前台活动时调用onResume
,当不再是前台活动时调用onPause
从Pref屏幕返回后,不应清除ListView,除非在显示Pref屏幕时活动已被销毁(在这种情况下,应使用保存的捆绑包调用onCreate)
savedInstanceState仅在活动已销毁且需要重新创建时使用。在本例中,您的ListActivity看起来没有被销毁
您是否在某处手动清除ListView?使用我希望避免的数据存储。onSaveInstanceState和onRestore使用这个捆绑包,这使它非常方便。所以我必须手动完成所有的工作…见上面的评论。我想使用这些捆绑包,实现手动保存我想要避免的数据。第一个活动是listview,从首选项活动返回后,列表视图为空。listview有什么特别之处吗?为什么在切换活动后它是空的?我刚刚测试了一些其他应用程序,从prefs屏幕返回后,所有输入仍然存在?原因可能是什么?@AndyAndroid-我玩了我的一个应用程序&添加了onStart()
,onRestart()
,等等。记录生命周期的方法(onCreate()
是我在此之前拥有的唯一生命周期方法)。我看到我的活动在各种生命周期方法和soemtime中翻转,这些方法和soemtime称为onSaveInstanceState
。但是,我无法让应用程序调用onRestoreInstanceState()
,每次我返回到我的列表时,它都很好,即活动未被终止并保持状态。我将开发工具设置为销毁每个活动,它也开始调用onRestoreInstanceState
。