Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在Android生命周期中保存状态_Android_Android Activity_State - Fatal编程技术网

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

Android:在Android生命周期中保存状态,android,android-activity,state,Android,Android Activity,State,我指的是 我有一个用户可以“中断”的活动,例如,用户打开菜单调用首选项屏幕。调用首选项屏幕时,会调用SaveInstanceState(Bundle),我可以保存数据。到目前为止还可以。但按下后退按钮时,不会调用恢复安装状态(Bundle savedInstanceState) 那么我怎样才能拯救我的国家呢?我在调用新活动时必须这样做吗?但是怎么做呢? 我能想到的唯一方法是通过将状态传递给新活动来保存状态,对保存的数据不做任何处理,将其返回到第一个活动,并在ActivitResult中还原状态。

我指的是

我有一个用户可以“中断”的活动,例如,用户打开菜单调用首选项屏幕。调用首选项屏幕时,会调用SaveInstanceState(Bundle),我可以保存数据。到目前为止还可以。但按下后退按钮时,不会调用恢复安装状态(Bundle savedInstanceState)

那么我怎样才能拯救我的国家呢?我在调用新活动时必须这样做吗?但是怎么做呢?
我能想到的唯一方法是通过将状态传递给新活动来保存状态,对保存的数据不做任何处理,将其返回到第一个活动,并在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