【问题标题】:Android - Save current onCreate state when switching between different activitiesAndroid - 在不同活动之间切换时保存当前的 onCreate 状态
【发布时间】:2021-05-09 19:49:22
【问题描述】:

我是 java 和 android studio 的新手,在阅读文档后,我仍然对 Activity 生命周期以及如何有效地使用它感到有些困惑。

我正在构建一个包含多个活动的应用程序。首次在主活动中打开应用程序时会加载关键数据。但是,当我移动到另一个活动然后返回主活动时,再次调用 onCreate 是我不想要的。我知道有一种方法可以保存您的 onCreate 实例,但我仍然不确定如何执行此操作。这是我所做的:

 @Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    if (outState != null) {
        // Restore value of members from saved state
        outState.putString("step_count", String.valueOf(stepCount));
        outState.putString("cal_count", String.valueOf(calCount));
        outState.putString("dis_count", String.valueOf(disCount));
        android.util.Log.d(TAG, "onSaveInstanceState");

    } else {
        // Probably initialize members with default values for a new instance
    }

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    savedInstanceState.getString("step_count", String.valueOf(stepCount));
    savedInstanceState.getString("cal_count", String.valueOf(calCount));
    savedInstanceState.getString("dis_count", String.valueOf(disCount));
    stepCount.setText(String.valueOf(stepCount));
    calCount.setText(String.valueOf(calCount));
    disCount.setText(String.valueOf(disCount));
    android.util.Log.d(TAG, "onRestoreInstanceState");

}

不胜感激任何形式的支持和指导。谢谢。

【问题讨论】:

    标签: java android oncreate android-savedstate


    【解决方案1】:

    再说一遍 - 这不是一个简单的问题。

    首先:是的,您可以通过覆盖“从上次会话”保存数据:onSaveInstanceState() 并通过覆盖 onRestoreInstanceState(savedInstanceState: Bundle?) 恢复它。看这里:https://developer.android.com/guide/components/activities/activity-lifecycle#saras

    其次:根据您的描述,您似乎需要 SharedPreferences 比这更多。如果您需要任何东西的密钥,并且应该从打开应用程序直到它被杀死或用户注销,SharedPreferences 是最常见的解决方案。

    onSaveinstanceState() 的创建是为了能够记住“在最后一个会话中”屏幕上的内容,而无需再次“计算”它。例如 EditText.text 或 ImageView.url 或类似的。

    【讨论】:

    • 我明白了。让我也给你更多的背景。在我的 onCreate 方法中,有几个方法被调用,这些方法与每次打开创建时都会改变的步数、卡路里和距离计数有关。每次调用 onCreate 时,这几种方法都会操作数据库中的数据,因此我需要传递从 onCreate 调用的其他活动的数据。希望这不会令人困惑。谢谢。
    • 如果我理解正确,您需要 startActivityForResult 以便从 onCreate() 调用的活动将能够将一些数据返回到前一个活动。但我不确定我是否正确理解了您的需求。 developer.android.com/training/basics/intents/result
    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多