当旋转,即方向发生变化时,活动被销毁,然后再次创建,重置活动状态数据。这可以通过重写onSaveInstance并将状态数据保存到其Bundle参数来解决。
但是当按下Back键时,表示用户真正退出应用程序的意图,似乎没有机制可以摆脱或更新该状态Bundle,因为onSaveInstance没有被调用。如果用户再次重新启动应用程序,则在系统杀死旧应用程序实例之前,旧状态Bundle将再次恢复,而不是重新开始并重新创建活动。现在应用程序被系统杀死后,问题就消失了。但我认为不可能通过覆盖onBackPressed强制应用程序被杀死。
所以我的问题是,如何在下次应用程序运行时保证Activity重新初始化为新状态?任何建议都将非常感谢 - thanx!
答案 0 :(得分:4)
这取决于您希望以何种方式保存您的信息。
1.如果您想保留该数据而只改变方向。
然后,您可以使用onSaveInstanceState(...)
和onRestoreInstanceState(...)
您可以在活动decalaration中处理清单内的配置更改。
android:ConfigChanges="keyboardHidden|orientation"
您可以拨打onConfigurationChanged (Configuration newConfig)
2.如果您想在重新启动应用程序时保留该数据,或者直到清除缓存或卸载,那么您可以使用SharedPreferences。
答案 1 :(得分:0)
Back键调用当前Activity的finish函数,但是home键不会使活动在后台运行。 通过回答您的问题,如果您按下后退按钮并且您已覆盖已保存的实例状态功能并再次启动活动,则它将不会恢复上一个活动实例,如果您按下主页按钮,则活动将不会创建,因为之前的活动将进入前景,按下主页按钮
进入背景答案 2 :(得分:0)
我认为,为此,您必须在活动被销毁时清除您的数据。您可以创建一个函数来初始化您的应用程序数据,并从onDestroy()调用此函数。
答案 3 :(得分:0)
旋转重新创建您的活动,您可以通过onSaveInstanceState和restoreInstanceState方法保存活动状态。但是你想要不同的东西。当您按下后退按钮时,活动将完成,您的活动的下一次启动将与之前的实例不同,因此您无法检索已保存的实例状态。如果要为其所有实例存储活动状态,则可以将活动数据存储为共享首选项。