在活动之间切换时可以使用onSaveInstanceState(...)吗?

时间:2015-12-04 07:22:44

标签: android android-activity

我有2个活动A(包含一个重定向到A和文本输入的按钮)和B(包含重定向到A的按钮)和我试图从一个切换到另一个但也保持来自A。

的文本值

我试图使用onSaveInstanceState(...)将文本值保存在Bundle中,但它根本不起作用。

以下是我要做的步骤:

  1. (在A上)添加一些文字
  2. 在A中,实现onSaveInstanceState(...)并保存Bundle中的文本值
  3. (在B上)单击指向A
  4. 的按钮
  5. (在A上)存储的值消失了(同样发送给onCreate(...)的Bundle也为空)
  6. 令我惊讶的是,当我在A中并更改方向时,值存储(并且发送到onCreate(...)的Bundle不为空)

    我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

简而言之,没有。

onSaveInstanceState用于在以下内容中保存实例状态:

  • 记忆压力
  • 屏幕旋转
  • 每当系统决定停止活动并稍后恢复活动时(例如,它移到后台,让用户忘记,之后再次被拿起)。

可以进一步阅读here

您应该将要保留的值存储在SharedPreferences中,例如在onPause来电期间。

答案 1 :(得分:0)

不能在活动之间切换时使用onSaveInstanceState()

onSaveInstanceState()被调用以在被杀死之前从活动中检索每个实例状态,以便可以在onCreate(Bundle)或onRestoreInstanceState(Bundle)中恢复状态(由此方法填充的Bundle将被传递给两者)。

在活动可能被杀死之前调用此方法,以便在将来某个时间返回时可以恢复其状态。例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态,以便在用户返回时对于活动A,可以通过onCreate(Bundle)或onRestoreInstanceState(Bundle)恢复用户界面的状态。

您可以在Android Developer页面上获得更多想法:

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)