onCreate(Bundle savedInstanceState)始终为null

我知道,这个问题之前在stackoverflow上被问到,但是没有答案对我有用。

可能值得一提的是:

  • 我将ActionBarSherlock与支持包一起使用。
  • 我按下主页按钮时调用onSaveInstanceState方法。 onCreate方法总是为Bundle savedInstanceState赋予NULL。
  • 永远不会调用onRestoreInstanceState方法。 (我不介意onCreate有效;))。
  • 另外(应该没关系)我尝试将super.onSaveInstanceState(outState)放在onSaveInstanceState的底部。 也没有运气。

这是代码。 我希望有人有这个问题并解决了它。

 public class MainActivity extends SherlockFragmentActivity { private static final String LOG_TAG = MainActivity.class.getSimpleName(); private static String STATE_TO_STORE = "state_to_store"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL")); // ... more code... } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL")); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_TO_STORE, 5); // store some int Log.d(LOG_TAG, "onSaveInstanceState bundle: " + outState.toString()); } // ... more code ... } 

日志记录清楚地表明正在调用onSaveInstanceState并且onCreate得到savedInstanceState = NULL

检查你的清单是否包含android:noHistory =“true”。

我花了几个小时寻找答案,就这么简单。

在我的情况下,原因是特定活动没有在清单文件中声明主题。

要解决此问题,请打开AndroidManifest.xml,单击“应用程序”,在“应用程序节点”中选择崩溃活动,然后在“属性”的“主题”字段中添加主题。 在我的情况下,它是

 @style/Theme.AppCompat.Light.DarkActionBar 

但您可以从其他活动中复制主题。

PS:我知道这是一个旧问题的答案,但我在寻找修复时偶然发现它并没有find可行的解决方案,所以这可能对其他人有所帮助。

当您按HOME按钮时,您的活动暂停而不会被破坏因此当您从主屏幕再次启动应用程序时,不会调用onCreate,除非操作系统终止您的应用程序以回收内存。 如果您希望在从主屏幕启动时重新创建活动,请在活动清单中输入此行android:finishOnTaskLaunch="true"

当Activity由于资源不足而被系统杀死时会触发onRestoreInstanceState(或onCreate中保存的bundle),并在你返回时重新启动。 活动可能不会被杀死(刚停止)并重新启动而不通过onRestoreInstanceState。 换句话说,onSaveInstanceState将始终被调用,但如果系统杀死并恢复onRestoreInstanceState,则会调用onRestoreInstanceState。 不只是停止并重新启动,没有暂停和恢复,也没有通过新意图启动。

在这里查看我的解释。 我确定它涵盖了你的问题。

什么时候onRestoreInstanceState调用?