【问题标题】: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来快速浏览平台源码。

    【讨论】:

    • 感谢您的详尽解释和链接。
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多