【问题标题】:Why is SaveInstanceState implemented differently in a Fragment( vs an Activity)?为什么 SavedInstanceState 在 Fragment(和 Activity)中的实现方式不同?
【发布时间】:2018-07-12 20:50:28
【问题描述】:
例如,在Activity 中,方法是受保护的:
@Override
protected void onSaveInstanceState(Bundle outState) {
而在 Fragment 中是公开的:
@Override
public void onSaveInstanceState(Bundle currentState) {
到目前为止,我已经在几个应用程序中看到了它。这是为什么?谢谢你。
请注意,这是一个一般性问题,与任何特定代码/应用程序无关。
【问题讨论】:
标签:
android
android-fragments
android-savedstate
【解决方案1】:
Activity是由系统管理的Android生命周期组件。 Activity#saveInstanceState() 由Activity#performSaveInstanceState() 调用,最终由系统ActivityThread 调用。由于在同一个类层次结构中,protected 就足够了。
Fragment 生命周期由FragmentActivity 在其他相关类的帮助下以不同的方式进行管理。通过FragmentManager#saveAllState() 执行状态保存。由于它在另一个类层次结构中,Fragment#onSaveInstanceState() 需要为public 才能被调用。
要了解此类内容,阅读平台源代码通常会有所帮助。比如我经常使用androidxref.com来快速浏览平台源码。