【发布时间】:2013-12-21 16:06:11
【问题描述】:
我有一个应用程序,我在其中以编程方式创建一个EditText 视图。我使用setId()为该视图分配了一个ID
myEditText.setId(100);
以便 Android 在暂停/停止应用程序时自动保存该对象的状态(我被建议这样做 here)。它在以下情况下有效:
- (1) 当我使用“主页”按钮离开应用程序时:如果我随后返回应用程序,对象的状态(显示的文本)将按预期恢复。
- (2) 在屏幕方向更改时(涉及 Android 自动销毁 Activity 并通过
Bundle恢复它)。对象状态也被保留。
但是,在这种情况下它不起作用:
- (3) 当我使用“返回”按钮离开应用程序时:如果我随后返回应用程序,
EditText对象为空。
关于为什么会发生这种情况的任何解释? Android 真的区分使用“主页”和“返回”离开应用程序吗?根据documentation,对象的状态应该通过Bundle自动保存,即使活动被销毁。这显然发生在情况(2)中。但不是情况(3)!
如果这是正常行为,当用户按下“返回”时,如何自动保存和恢复应用的状态?我知道我可以为此使用 SharedPreferences,但我宁愿让 Android 自动执行此操作,就像它在案例 (1) 和 (2) 中所做的那样。
至少在 Android 4.0 和 4.2 中会发生这种情况(我没有测试过其他版本)。
【问题讨论】:
-
使用共享首选项来存储值并恢复它。单击后退按钮后,当前活动将从后堆栈弹出并被销毁。堆栈中的前一个活动获得焦点
-
@Raghunandan 谢谢,但正如我在问题中所说,我想在没有 SharedPreferences 的情况下这样做。理想情况下,我想要与 Home 按钮相同的行为:Android 自动保存和恢复
-
当您使用返回按钮离开应用程序时,onDestroy() 方法也会在 onPause() 和 onStop() 方法之后调用。有关详细信息,请参阅活动生命周期。
-
@LuisMendo 使用 onSaveInstanceState 和 onRestoreInstanceState 您无法获取数据,因为当方向更改时,操作系统本身销毁的 Activity 和 Android 将保存您的数据,并且相同的数据将传递给下一个重新创建的 Activity..所以在这里您正在通过按主页按钮销毁 Activity,因此您需要保存数据并将其设置为新创建的活动。当主页按钮按下时,Activity 对象不会销毁..仅更改了活动状态。
-
注意:onDestroy() 不保证会被调用。如果系统因缺乏资源而终止您的应用程序,则只能保证调用 onPause()(3.0 之前)或 onPause() 和 onStop()(3.0及以上)。
标签: android android-edittext restore