繁体   English   中英

在旋转之后,在onCreate()FragmentActivity之前调用onCreate()Fragment

[英]After the rotate, onCreate() Fragment is called before onCreate() FragmentActivity

我正在使用FragmentActivity和Fragments。

应用程序启动时:

FragmentActivity onCreate() <------
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onAttach()
Fragment onCreate() <------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
Fragment onResume()

一切都还可以,在Fragment onCreate()之前调用FragmentActivity onCreate()。 当我旋转:

Fragment onPause()
FragmentActivity onPause()
Fragment onStop()
FragmentActivity onStop()
Fragment onDestroyView()
Fragment onDestroy()
Fragment onDetach()
FragmentActivity onDestroy()
---
Fragment onAttach()
Fragment onCreate() <----------
FragmentActivity onCreate() <---------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onResume()

片段onCreate()在FragmentActivity onCreate()之前调用。 为什么不一致?

在FragmentActivity onCreate()中,我生成了一些Fragment onCreate()得到的数据。 由于这种奇怪的行为,我不得不将我的代码从Fragment onCreate()移动到Fragment onCreateView(),以确保我的数据之前已经生成过。

我正在使用FragmentStatePagerAdapter来保存Fragments,也许这就是原因?

在Fragment的生命周期中调用onActivityCreated()之前,您不应指望有效的Activity。

在创建片段的活动并且实例化此片段的视图层次结构时调用。 一旦这些部分就位,它可用于进行最终初始化,例如检索视图或恢复状态。

重建顺序不是线性的确切原因,我不能告诉你。 允许每个组件按自己的进度重新启动而不是强制执行严格的订单可能更有效。 举例来说,我更喜欢我的LoaderManager尽早开始,我们会担心布局它的内容以后

(我喜欢一个好的图表。)

enter image description here

片段在Activity的onCreate()期间恢复。 但重要的是,它们将在基类Activity类的onCreate()中恢复。 因此,如果首先调用super.onCreate() ,则在恢复碎片后,将继续执行onCreate()方法的所有其余部分。

一种可能的解决方案是恢复你的状态或计算你的片段你调用super.onCreate() 之前需要的数据。

生命周期如下:

ACTIVITY onCreate (pre-super)
FRAGMENT onAttach
ACTIVITY onCreate (post-super)

所以做这样的事情:

@Override
public void onCreate( final Bundle savedInstanceState )
{
    Log.d( TAG, "ACTIVITY onCreate (pre-super)" );
    // Do your processing here
    super.onCreate( savedInstanceState ); // Fragments will be restored here
    Log.d( TAG, "ACTIVITY onCreate (post-super)" );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM