onCreate(Bundle savedInstanceState)始终为null

时间:2013-03-28 16:20:49

标签: android android-lifecycle activity-lifecycle

我知道,这个问题之前在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

4 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:3)

就我而言,原因是特定活动没有在清单文件中声明主题。

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

@style/Theme.AppCompat.Light.DarkActionBar

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

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

答案 2 :(得分:2)

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

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

when is onRestoreInstanceState called?

答案 3 :(得分:2)

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