android– 用null参数调用super.onCreate()?

android– 用null参数调用super.onCreate()?,第1张

概述在onCreate(Bundlebdl){}中,我们必须通过super.onCreate(bdl)调用它的超级构造函数.对于新创建的活动,我们在onCreate(Bundlebdl){}中获得了一个nullBundle.因此,当我们调用super.onCreate(bdl)时,它与调用super.onCreate(null)相同.对于重建的活动(如旋转后),我们得到了一个

在onCreate(Bundle bdl){}中,我们必须通过super.onCreate(bdl)调用它的超级构造函数.

对于新创建的活动,我们在onCreate(Bundle bdl){}中获得了一个null Bundle.因此,当我们调用super.onCreate(bdl)时,它与调用super.onCreate(null)相同.

对于重建的活动(如旋转后),我们得到了一个非null的Bundle.但我注意到即使我们调用super.onCreate(null)而不是super.onCreate(bdl),它似乎也是一样的.布局恢复工作在super.onRestoreInstanceState(bdl)中完成.

那么,在所有情况下调用super.onCreate(null)与调用super.onCreate(bdl)是否相同呢?

谢谢.

解决方法:

根据Android源代码,Activity.onCreate()方法将saveInstanceState包转发给活动的片段.更具体地说,它使用“androID:fragments”键获取一个parcelable,并使用FragmentManager.restoreAllStates()方法将此parcelable转发给片段,FragmentManager.restoreAllStates()方法本身可以恢复所有片段的状态.

Activity.onRestoreInstanceState()方法将包转发到活动的窗口.它再次从保存的实例中获取“androID:vIEwHIErarchyState”包,并使用Window.restoreHIErarchyState()方法将其转发到窗口.

所以要回答你的问题,如果你的活动不使用Fragments,那么确实调用super.onCreate(null)不会改变任何东西.但作为最佳实践,我建议您始终转发确切的savedInstance包(除非您知道自己在做什么).

编辑:以下是我所谈到的示例源代码,取自AOSP v17:

Activity.java

protected voID onCreate(Bundle savedInstanceState) {    // [... some content ellipsed for readability purposes]    if (savedInstanceState != null) {        Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);        mFragments.restoreAllState(p, mLastNonConfigurationInstances != null                ? mLastNonConfigurationInstances.fragments : null);    }    mFragments.dispatchCreate();    getApplication().dispatchActivityCreated(this, savedInstanceState);    mCalled = true;}// [...]protected voID onRestoreInstanceState(Bundle savedInstanceState) {    if (mWindow != null) {        Bundle windowstate = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);        if (windowstate != null) {            mWindow.restoreHIErarchyState(windowstate);        }    }}
总结

以上是内存溢出为你收集整理的android – 用null参数调用super.onCreate()?全部内容,希望文章能够帮你解决android – 用null参数调用super.onCreate()?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1096423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存