所以我在我的OnsavedInstanceState
中有这个代码@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
String [] a={"haha"};
savedInstanceState.putStringArray("MyStringarray", a);
Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}
我在onCreate中有这段代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState==null){
Toast.makeText(this, "not there", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "is there", Toast.LENGTH_SHORT).show();
}
}
为什么吐司总是说不在那里?我打开应用程序然后切换到另一个应用程序,它显示了吐司保存的数组,但当我重新打开应用程序时,它说不存在,即使捆绑包应该有包含“哈哈”的字符串数组。
非常感谢!
答案 0 :(得分:4)
在onSaveInstanceState()
中,您正在修改savedInstanceState
而不保存此修改后的对象。如果super
复制了Bundle
,则不会保存此修改。
请尝试在方法结束时调用super.onSaveInstanceState(savedInstanceState);
。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
String [] a={"haha"};
savedInstanceState.putStringArray("MyStringarray", a);
super.onSaveInstanceState(savedInstanceState);
Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:1)
问题可能在于如何在清单中定义您的活动。例如,如果你的活动有设置android:clearTaskOnLaunch =“true”我认为你不会收到保存的包。有关各种活动设置的详细信息,请参阅http://developer.android.com/guide/topics/manifest/activity-element.html。
您还可以检查其他被覆盖的方法。例如,在你覆盖一个并做一些奇怪的事情时,你可能会搞乱活动堆栈。你是否在代码中的任何地方调用了finish(),如果是,请将其删除,看看会发生什么。
答案 2 :(得分:0)
请勿将此方法与活动生命周期回调混淆,例如 onPause(),当活动被放置在背景中或在前往在销毁之前调用的销毁或 onStop()。调用 onPause()和onStop()时的一个示例而不是此方法是当用户从活动B导航回活动A时:无需调用onSaveInstanceState(Bundle) 在B上,因为该特定实例永远不会被恢复,因此系统会避免调用它。调用 onPause()和而不是onSaveInstanceState(Bundle)时的示例是在活动A前面启动活动B时:系统可能避免调用onSaveInstanceState(如果在B的生命周期内未被杀死,则活动A上的 >,因为A的用户界面的状态将保持不变。