如何使用onSavedInstance?

How to use onSavedInstance?

一个简单的问题: 为什么我的 onSavedInstance 不起作用?我想保存用户 activity 的最后状态(当前锻炼会话等),但由于某些特殊原因,当我按 home概览按钮然后我return进入应用程序。它应该 return 我是 activity 的最后保存状态,但似乎有些东西被窃听了。我已经为这个问题苦苦挣扎了两个星期。我搜索了整个论坛,但仍然找不到答案。希望有人能帮忙:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_workout);

    if (savedInstanceState != null) {
        // What should I call here?

    } else {
        // And here?
    }
}


@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
}

onSaveInstanceState(Bundle savedInstanceState) 在用户离开时调用 app.It 提供了一个 Bundle 对象,您可以传递要保存为键值对的值。

static final String WORKOUT_STATE = "state";


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

    // Save the user's current workout state
    savedInstanceState.putInt(WORKOUT_STATE, currentState);


    super.onSaveInstanceState(savedInstanceState);
}

重新创建 activity 时,您可以通过两个选项恢复当前状态。它可以在 onCreate(Bundle savedInstanceState) 方法或 onRestoreInstanceState(Bundle savedInstanceState) 方法中完成。如果您应该在 onCreate 中执行此操作,则应检查 savedInstanceState 是否不为空。

如果 savedInstanceState 不为空,则 activity 正在重新创建,这是您提取值的地方。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        currentState = savedInstanceState.getInt(WORKOUT_STATE);

    } else {

        // Initialize members with default values for a new instance
    }

}

您可以选择使用 onRestoreInstanceState(Bundle savedInstanceState) 方法,而不是在 onCreate 方法中提取值。如果有状态要恢复,则调用此方法,因此您无需检查 savedInstanceState 是否为 null。

public void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);

    // Restore state
    currentScore = savedInstanceState.getInt(WORKOUT_STATE);

}

您可以在此处阅读有关保存 UI 状态的更多信息:https://developer.android.com/topic/libraries/architecture/saving-states.html

已解决!

我解决了我的问题, 信不信由你,问题出在 FLAG_ACTIVITY_NO_HISTORY 我的意图服务中。感谢您提供帮助!