6月 032020
 

基于Android8.1系统源码中的注释翻译

翻译如下:

  在一个Activity被杀死之前被调用以取出Activity中每个对象实例的状态,这些状态可以在onCreate或者onRestoreInstanceState方法中被重新加载到实例(此方法产生的Bundle将传递到那两个方法)。

  这个方法在一个Activity可能被杀掉之前(不是刚刚被杀之前)被调用,以便于之后某些时候Activity被重新打开时可以恢复它的(某些变量的)状态。比如,如果ActivityB被打开并显示在ActivityA之前(ActivityA被置于后台),在某些时候ActivityA由于系统资源回收被杀掉,AvtivityA将有机会使用此方法来保存用户界面的当前状态,以便当用户回到ActivityA时,用户界面的状态可以在Activity的onCreate或者onRestoreInstanceState中被恢复。

  不要把这个方法和Activity的生命周期比如onPause和onStop混淆。比如,当从ActivityB退出返回到ActivityA时,onPause和onStop将被调用,但是onSaveInstanceState不会被调用,此时没有必要对ActivityB调用此方法,因为ActivityB将被销毁,并且不会被恢复。另外一个例子,当ActivityB被打开并显示在ActivityA之前时,系统可能会避免调用ActivityA的onSaveInstanceState方法,因为在ActivityB的生命周期内,ActivityA的ui状态可能一直保持完整。

  大部分UI组件的实例的(状态保存)默认实现是通过对布局中有id属性的view调用view自身的onSaveInstanceState()方法,通过id保存当前有焦点的view(通过view的onRestoreInstanceState来恢复状态)。如果你想使用这个方法来保存某个view的状态,最好使用view自身的onSaveInstanceState来处理,否则每个(Activity中)的view实例都需要你写代码来维护。

  如果此方法被调用,将在onStop之前发生,但是不能保证肯定是在onPause之后发生

原文如下:

 

打赏
 Posted by on 2020-06-03

Sorry, the comment form is closed at this time.