在旋转之后,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尽可能早地开始,我们将在后面担心它的内容布局。
(我爱一个很好的图。)
碎片在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)" ); }