源码分析---onSaveInstanceState()方法分析

①在Activity的onSaveInstanceState()方法中,调用super()方法,里面最终就是调用这里的方法。主要是保存activity的状态,fragment的状态,最终调用application进行存储状态。(hierarchy 等级的)
在这里插入图片描述
②首先是Activity的状态。上面的mWindow其实就是PhoneWindow,然后调用saveHierarchyState()方法。这里会使用mContentParent.saveHierarchyState(states)方法,mContentParent就是在onCreate()中产生的contentView.它本身就是ViewGroup,但是在ViewGroup类中并没有saveHierarchyState()方法,这个方法在它的父类View中。
在这里插入图片描述

③在View类这个方法主要是保存view类的状态。
在这里插入图片描述
但是需要注意的是,view必须设置id,否则就能不能把状态存储在SparseArray中
在这里插入图片描述
在这里正常情况下mStartActivityRequestWho肯定是为空值。因此默认返回的就空的状态对象:BaseSavedState.EMPTY_STATE,也就是没有保存任何的View的状态。
在这里插入图片描述
④保存fragment的状态,mHost是FragmentHostCallback的对象。mFragmentManager是FragmentManagerImpl的对象。
在这里插入图片描述
其中saveAllState()方法代码比较多,主要就是fragment的各个状态的记录。
这里的mActive就是fragment的map集合。他是在onCreateView()中调用addFragment()方法后添加进去的。
在这里插入图片描述
在这里插入图片描述
最终返回的就是保存fragment状态的对象。其中的各个属性都是从上面代码中保存的状态。
在这里插入图片描述
⑤ 在Application类中进行最后的状态的保存。
在这里插入图片描述

收集activity的回调
在这里插入图片描述

其实在TextView中,其实也有onSaveInstanceState()方法和onRestoreInstanceState()方法,能够保存文字和文字的开始结束的位置等。

猜你喜欢

转载自blog.csdn.net/yuezheyue123/article/details/82800328
今日推荐