首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onSaveInstanceState()和包

onSaveInstanceState()和包
EN

Stack Overflow用户
提问于 2013-11-05 19:57:50
回答 2查看 735关注 0票数 0

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

必须在调用此方法之前创建Bundle对象,然后将其传递给此方法。假设它是按如下方式创建和传递的:

代码语言:javascript
复制
Bundle savedInstanceState= new Bundle();
onSaveInstanceState(savedInstanceState);

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

代码语言:javascript
复制
public void onSaveInstanceState(Bundle saved){
. . . //data added to the bundle named saved
} 

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

那么,这个方法的意义是什么?那么,当它不改变自身之外的任何捆绑并且也不返回任何东西时,它有什么意义呢?

我们还说,传递给onCreate的包携带了先前保存的活动的冻结状态。这个包似乎来自onSavedInstanceState()中的处理,但是方法不返回任何东西,也不改变传递给它的包的值。我很困惑。

如果有人能帮我理解这个概念,我会很感激的。是的,我读过Activity中的参考资料。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-05 20:21:08

因此,假设您在自定义活动中重写了onSaveInstanceState方法,如下所示:

代码语言:javascript
复制
public void onSaveInstanceState(Bundle dataToBeSaved) {
    super.onSaveInstanceState(dataToBeSaved);
    dataToBeSaved.putString("myKey", "myImportantStringValue"); 
    //populate bundle with more data
} 

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

  • 正如你在问题中正确指出的那样,安卓系统将创建Bundle data = new Bundle();
  • Android将调用您的activity.onSaveInstanceState(data);,将引用传递给刚刚创建的Bundle对象。
  • onSaveInstance方法接收该引用的副本(在方法中命名为dataToBeSaved )。请注意,此引用(及其副本)引用系统管理的Bundle对象。因此,您的方法将填充此系统管理的Bundle对象。
  • 系统在重新启动活动时保留修改过的Bundle对象
  • 当您的活动返回时,系统将调用您的activity.onCreate(data);,传递对此先前存储的Bundle的引用。
  • 在您的onCreate()中,您将获得对Bundle对象的引用,该对象的内容与您在onSaveInstanceState()中访问的内容相同。 基于注释的编辑,您将获得对完全相同的Bundle或其重新创建的副本的引用,这取决于系统如何管理活动/进程重新启动之间的内存,这与开发人员无关。

希望能为你澄清一切。

票数 1
EN

Stack Overflow用户

发布于 2013-11-05 20:13:02

根据你的问题:

那么,这个方法的意义是什么?那么,当它不改变自身之外的任何捆绑并且也不返回任何东西时,它有什么意义呢?

我认为您完全忽略了方法本身的全部要点,甚至超出了获取并使您有机会收集一些您在重新创建后可能感兴趣的信息的参数之外,这个方法的目的是让您知道,一种可能使对象失去其状态的机制即将启动。例如,您可以注意到,当设备被旋转时,方法就会被执行,活动的“娱乐”将影响对象的当前状态,使您有机会保存信息并在"onRestoreInstanceState“中使用它,您可能还会注意到,如果您按下并关闭某个活动,它不会被执行,因为您不再关心那些对象状态,因此除了在包中获得的任何信息(这是您的填充责任)之外,此方法的重要意义是让您知道会破坏您的状态的东西即将开始,您应该采取预防措施……

希望这能澄清你的问题。

致以问候!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19797756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档