6

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

可能值得一提:

  • 我将 ActionBarSherlock 与支持包一起使用。
  • onSaveInstanceState当我按下主页按钮时调用方法。该方法onCreate总是为Bundle savedInstanceState.
  • 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

4 回答 4

12

检查您的清单不包含 android:noHistory="true"。

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

于 2013-05-07T21:13:21.297 回答
3

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

要解决此问题,请打开 AndroidManifest.xml,单击 Application,在 Application Nodes 中选择崩溃的活动,然后在 Attributes 的 Theme 字段中添加主题。在我的情况下,它是

@style/Theme.AppCompat.Light.DarkActionBar

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

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

于 2014-02-05T21:01:53.923 回答
2

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

于 2013-03-28T16:34:12.350 回答
2

onRestoreInstanceState(或保存在 onCreate 中的包)将在 Activity 由于缺乏资源而被系统杀死并在您返回时重新启动时触发。Activity 可能不会被杀死(只是停止)并在不经过 onRestoreInstanceState 的情况下重新启动。换句话说,onSaveInstanceState 会一直被调用,但是 onRestoreInstanceState 如果被系统杀死并恢复,就会被调用。不仅仅是停止和重新启动,不是暂停和恢复,也不是由新意图开始。

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

何时调用 onRestoreInstanceState?

于 2013-03-28T16:30:44.647 回答