gpt4 book ai didi

java - onSaveInstanceState() 和 bundle

转载 作者:行者123 更新时间:2023-12-02 06:34:28 29 4
gpt4 key购买 nike

它是关于 void onSaveInstanceState(Bundle saving) 和一个基本的 java 概念。

在调用此方法之前必须创建一个 Bundle 对象,然后将其传递给此方法。假设它是这样创建和传递的:

Bundle savedInstanceState= new Bundle();
onSaveInstanceState(savedInstanceState);

此方法将数据保存在该包中。但它不会返回该包(它已向其中添加了名称-值对)。

public void onSaveInstanceState(Bundle saved){
. . . //data added to the bundle named saved
}

因此,保存的包(被声明为参数变量)仅在方法中具有作用域。在方法内部添加到saved的数据不会添加到savedInstanceState中。该方法也没有返回任何内容。

那么当这个方法不改变自身外部的任何包并且也不返回任何内容时,它的意义是什么?

我们还说传递给 onCreate 的包携带了先前保存的 Activity 的卡住状态。该 bundle 似乎来自 onSavedInstanceState() 中的处理,但该方法不会返回任何内容,也不会更改在其自身之外传递给它的 bundle 的值。我很困惑。

如果有人能帮助我理解这个概念,我将不胜感激。是的,我已阅读 Activity API 中给出的引用资料。

最佳答案

所以,假设您在自定义 Activity 中重写了 onSaveInstanceState 方法,如下所示:

public void onSaveInstanceState(Bundle dataToBeSaved) {
super.onSaveInstanceState(dataToBeSaved);
dataToBeSaved.putString("myKey", "myImportantStringValue");
//populate bundle with more data
}

以下是当您的 Activity 被终止并有机会保存一些数据时会发生的情况(简化):

  • Android 系统将按照您在问题中正确说明的方式创建 Bundle data = new Bundle();
  • Android 将调用您的 activity.onSaveInstanceState(data);,将引用传递给刚刚创建的 Bundle 对象。
  • 您的 onSaveInstance 方法接收该引用的副本(在您的方法内名为 dataToBeSaved)。请注意,此引用(及其副本)引用系统管理的 Bundle 对象。因此,您的方法将填充此系统管理的 Bundle 对象。
  • 当您的 Activity 重新启动时,系统会保留修改后的 Bundle 对象
  • 当您的 Activity 恢复时,系统将调用您的 activity.onCreate(data); 传递[引用]此先前存储的 Bundle
  • onCreate() 中,您将获得对 Bundle 对象的引用,其内容与您在 onSaveInstanceState() 中访问的对象相同< br/>[基于评论的编辑]您将获得对完全相同的Bundle或其重新创建的副本的引用,具体取决于系统在 Activity/进程重新启动之间管理内存的方式,这与开发商。

希望能为您澄清问题。

关于java - onSaveInstanceState() 和 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797756/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com