繁体   English   中英

如何使用 onSavedInstance?

[英]How to use onSavedInstance?

一个简单的问题:为什么我的 onSavedInstance 不起作用? 我想保存用户活动的最后状态(当前的锻炼会话等),但由于某种特殊原因,当我按下主页概览按钮然后返回应用程序时,它不断将我转回 mainActivity。 它应该返回上次保存的活动状态,但似乎有些东西被窃听了。 我已经为这个问题苦苦挣扎了两个星期。 我搜索了整个论坛,但仍然找不到答案。 希望有人可以帮助:

@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) 在用户离开您的应用程序时被调用。它提供了一个 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);
}

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

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

@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中。 感谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM