①在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()方法,能够保存文字和文字的开始结束的位置等。
本文深入解析了Android中Activity的onSaveInstanceState方法的工作原理,包括如何保存Activity和Fragment的状态,以及在View、Application层面的状态存储机制。
280

被折叠的 条评论
为什么被折叠?



