它是关于void (Bundle OnSaveInstanceState)和一个基本的java概念。
必须在调用此方法之前创建Bundle对象,然后将其传递给此方法。假设它是按如下方式创建和传递的:
Bundle savedInstanceState= new Bundle();
onSaveInstanceState(savedInstanceState);此方法将数据保存在该包中。但是它不返回那个包(它已经向其添加了名称-值对)。
public void onSaveInstanceState(Bundle saved){
. . . //data added to the bundle named saved
} 因此,保存的包(被声明为参数变量)仅在方法中具有作用域。添加到方法中保存的数据不会添加到savedInstanceState中。该方法也不会返回任何内容。
那么,这个方法的意义是什么?那么,当它不改变自身之外的任何捆绑并且也不返回任何东西时,它有什么意义呢?
我们还说,传递给onCreate的包携带了先前保存的活动的冻结状态。这个包似乎来自onSavedInstanceState()中的处理,但是方法不返回任何东西,也不改变传递给它的包的值。我很困惑。
如果有人能帮我理解这个概念,我会很感激的。是的,我读过Activity中的参考资料。
发布于 2013-11-05 20:21:08
因此,假设您在自定义活动中重写了onSaveInstanceState方法,如下所示:
public void onSaveInstanceState(Bundle dataToBeSaved) {
super.onSaveInstanceState(dataToBeSaved);
dataToBeSaved.putString("myKey", "myImportantStringValue");
//populate bundle with more data
} 下面是当您的活动被终止并有机会保存一些数据时所发生的(简化)情况:
Bundle data = new Bundle();。activity.onSaveInstanceState(data);,将引用传递给刚刚创建的Bundle对象。onSaveInstance方法接收该引用的副本(在方法中命名为dataToBeSaved )。请注意,此引用(及其副本)引用系统管理的Bundle对象。因此,您的方法将填充此系统管理的Bundle对象。Bundle对象activity.onCreate(data);,传递对此先前存储的Bundle的引用。onCreate()中,您将获得对Bundle对象的引用,该对象的内容与您在onSaveInstanceState()中访问的内容相同。
基于注释的编辑,您将获得对完全相同的Bundle或其重新创建的副本的引用,这取决于系统如何管理活动/进程重新启动之间的内存,这与开发人员无关。希望能为你澄清一切。
发布于 2013-11-05 20:13:02
根据你的问题:
那么,这个方法的意义是什么?那么,当它不改变自身之外的任何捆绑并且也不返回任何东西时,它有什么意义呢?
我认为您完全忽略了方法本身的全部要点,甚至超出了获取并使您有机会收集一些您在重新创建后可能感兴趣的信息的参数之外,这个方法的目的是让您知道,一种可能使对象失去其状态的机制即将启动。例如,您可以注意到,当设备被旋转时,方法就会被执行,活动的“娱乐”将影响对象的当前状态,使您有机会保存信息并在"onRestoreInstanceState“中使用它,您可能还会注意到,如果您按下并关闭某个活动,它不会被执行,因为您不再关心那些对象状态,因此除了在包中获得的任何信息(这是您的填充责任)之外,此方法的重要意义是让您知道会破坏您的状态的东西即将开始,您应该采取预防措施……
希望这能澄清你的问题。
致以问候!
https://stackoverflow.com/questions/19797756
复制相似问题