0

当旋转,即方向发生变化时,一个Activity被销毁然后重新创建,重置Activity状态数据。这可以通过覆盖 onSaveInstance 并将状态数据保存到其 Bundle 参数来解决。

但是当按下 Back 键时,表明用户打算真正退出应用程序,似乎没有机制可以摆脱或更新该状态 Bundle,因为 onSaveInstance 没有被调用。如果用户再次重新启动应用程序,在系统杀死应用程序的旧实例之前,旧状态 Bundle 会再次恢复,而不是重新开始并重新创建 Activity。现在应用程序被系统杀死后,问题就消失了。但我认为不可能通过覆盖 onBackPressed 来强制终止应用程序,例如。

所以我的问题是,如何保证 Activity 在下次运行应用程序时以新状态重新初始化?任何建议将不胜感激-thanx!

4

4 回答 4

3

这取决于您希望以何种方式保存您的信息。

1.如果您想在仅更改方向时保留该数据。那么你可以使用的最佳方式onSaveInstanceState(...)onRestoreInstanceState(...)

您可以在活动声明中处理清单内的配置更改。

android:ConfigChanges="keyboardHidden|orientation"你可以打电话给onConfigurationChanged (Configuration newConfig)

2.如果您希望在重新启动应用程序或清除缓存或卸载时保留该数据,则可以使用 SharedPreferences。

参考

于 2013-10-23T06:20:30.140 回答
0

旋转重新创建您的活动,您可以通过 onSaveInstanceState 和 restoreInstanceState 方法保存活动状态。但是你想要一些不同的东西。当您按下后退按钮时,活动将完成,您的活动的下一次启动将与之前的实例不同,因此您无法检索已保存的实例状态。如果您想为其所有实例存储活动状态,您可以将活动数据存储到共享首选项中。

于 2013-10-23T05:29:05.643 回答
0

Back 键调用当前 Activity 的完成函数,但 home 键不会使 Activity 在其后台运行。通过回答您的问题,如果您按下后退按钮并且您已经覆盖了保存的实例状态功能并再次启动活动,那么它将不会恢复以前的活动实例,如果您按下主页按钮,活动将不会像以前的活动那样创建进入前台,通过按主页按钮进入后台

于 2013-10-23T05:20:32.723 回答
0

我认为为此,您必须在活动被破坏时清除数据。您可以创建一个函数来初始化您的应用数据并从 onDestroy() 调用此函数。

于 2013-10-23T05:25:18.797 回答