保存捆绑(活动A):
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("test", "value");
super.onSaveInstanceState(outState);
}
导航到活动B;
startActivity(new Intent(getBaseContext(), B.class));
回到活动A:
startActivity(new Intent(getBaseContext(), A.class));
尝试在活动A中加载我写入bundle的值:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("MY", "saved instance is null"+ Boolean.toString(savedInstanceState == null));
}
返回always savedInstanceState = null。我在这里缺少什么?
返回主要活动时,永远不会触发onRestoreInstanceState
答案 0 :(得分:5)
您的代码没有任何问题。尝试在活动A时旋转设备。您将在日志中看到以下内容,这意味着您的onSaveInstanceState()工作正常:
saved instance is nullfalse
以下是Android Developer Site的摘录,您可能会感兴趣:
您可以在其中保存有关活动当前状态的信息的回调方法是onSaveInstanceState()。系统在使活动易受破坏之前调用此方法并将其传递给Bundle对象。 Bundle是您可以使用putString()等方法将有关活动的状态信息存储为名称 - 值对的地方。然后,如果系统终止您的活动进程并且用户导航回您的活动,系统会将Bundle传递给onCreate(),以便您可以恢复在onSaveInstanceState()期间保存的活动状态。如果没有要恢复的状态信息,则传递给onCreate()的Bundle为空。
注意:无法保证在销毁活动之前调用onSaveInstanceState(),因为在某些情况下无需保存状态(例如当用户使用BACK键离开活动时) ,因为用户明确关闭了活动)。如果调用该方法,则始终在onStop()之前调用它,并且可能在onPause()之前调用。
答案 1 :(得分:4)
我通过以下方式解决了这个问题:
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
重新启动从后台保存状态的旧intent。如果没有这个标志,我认为当调用startActivity时,它会创建一个Activity的新实例,而不是从堆栈中获取旧实例。
答案 2 :(得分:2)
在向其添加内容之前,您必须执行super.onSaveInstanceState(outState)。
答案 3 :(得分:2)
如果导航到另一个Activity并返回,最好的方法是将其保存到SharedPreference
方法中onPause()
,该方法必须在加载新活动时执行。在另一个Activity
上,可以通过访问共享首选项在onCreate()
中访问该值。
答案 4 :(得分:0)
如果您希望在设备旋转时保留片段的状态,并且您想知道永远不会调用onSaveInstanceState
:
super.onSaveInstanceState(outState);
功能中致电onSaveInstanceState
。 android:configChanges
。答案 5 :(得分:0)
除非您的应用程序在Lollipop(API21)版本的Android或更高版本上运行,否则您的
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
将不会被调用,因为它在21之前的平台上根本不存在。要支持API 21之前的设备,您必须(而不是上面的)替代以下方法:
public void onSaveInstanceState (Bundle outState);
这同样适用于API 21+,因此,您当然不必重写这两种方法(除非您知道需要处理新提供的PersistableBundle)。
(已复制,因为它对我有用) 来源:onSaveInstanceState is not getting called after screen rotation