savedInstanceState始终为null

所以我在我的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(); } } 

怎么烤面包总是说不在那里? 我打开应用程序然后切换到另一个应用程序,它显示吐司保存数组,但当我重新打开应用程序,它说不存在,即使捆绑应该有包含“哈哈”的字符串数组。

非常感谢!

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(); } 

问题可能在于如何在清单中定义活动。 例如,如果你的活动有设置android:clearTaskOnLaunch =“true”我认为你不会收到保存的包。 有关各种活动设置的详细信息,请参阅http://developer.android.com/guide/topics/manifest/activity-element.html 。

您还可以检查其他重写方法。 例如,在你覆盖一个并做一些奇怪的事情时,你可能会搞乱活动堆栈。 您是否在代码中的任何位置调用了finish(),如果是,请将其删除并查看会发生什么。

不要将此方法与活动生命周期回调混淆,例如onPause() ,当活动被放置在后台或者去往销毁的路径时,或者在销毁之前调用的onStop()时 ,它总是被调用。 调用onPause()和onStop()时的一个示例,而不是此方法是当用户从活动B导航回活动A时: 不需要在B上调用onSaveInstanceState(Bundle) ,因为该特定实例永远不会被恢复,所以系统避免调用它。 调用onPause()不是onSaveInstanceState(Bundle)的示例是在活动A前面启动活动B时:如果在B的生命周期内没有杀死活动A,则系统可以避免在活动A上调用onSaveInstanceState(Bundle) A的用户界面状态将保持不变。