在旋转之后,onCreate()片段在onCreate()FragmentActivity之前被调用

我正在使用FragmentActivity和Fragments。

当应用程序启动时:

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

一切正常,FragmentActivity onCreate()在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()我生成一些数据,片段onCreate()获取。 由于这种奇怪的行为,我不得不将我的代码从片段onCreate()移动到片段onCreateView(),以确保我的数据以前已经生成。

我使用FragmentStatePagerAdapter来保存碎片,也许这是原因?

在片段生命周期中的onActivityCreated()调用之前,您不应该依赖有效的活动。

当片段的活动已经被创build并且这个片段的视图层次被实例化时调用。 一旦这些部分就绪,就可以用来做最后的初始化,比如检索视图或恢复状态。

重build顺序不是线性的确切原因,我不能告诉你。 允许每个组成部分按照自己的步调重新开始,而不是强制僵化的命令可能更有效。 例如,我更喜欢我的LoaderManager尽可能早地开始,我们将在后面担心它的内容布局。

(我爱一个很好的图。)

enter image description here

碎片在Activity的onCreate()过程中被恢复。 重要的是,它们在基类Activity类的onCreate()被恢复。 因此,如果你先调用super.onCreate() ,你的onCreate()方法的其余部分将在你的Fragments被恢复后执行。

一个可能的解决scheme是恢复你的状态或计算你的Fragment将需要的数据之前,你调用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)" ); } 
Interesting Posts