Android - 在不同活动之间切换时保存当前的 onCreate 状态

Posted

技术标签:

【中文标题】Android - 在不同活动之间切换时保存当前的 onCreate 状态【英文标题】:Android - Save current onCreate state when switching between different activities 【发布时间】: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");


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

【问题讨论】:

【参考方案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

以上是关于Android - 在不同活动之间切换时保存当前的 onCreate 状态的主要内容,如果未能解决你的问题,请参考以下文章

屏幕适配经验

Android:在视图/活动/片段之间滑动切换

Android - 恢复上次查看的活动

Android - 恢复上次查看的活动

Android - 在横向和纵向模式之间切换使 Intent 失去价值

Activity生命周期理解