2016-01-24 70 views
-1

我在Activity的onCreate()方法中在运行时附加了一个片段。我想了解片段上生命周期方法调用的顺序。然而,行为似乎与预期不符。我正在做一个屏幕旋转来理解这一点。以下是屏幕旋转后的日志。在怀疑的地方把标记放在日志中。 有人可以解释这里发生了什么吗?片段生命周期方法序列

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d(tag, "OnCreate()"); 
     if (savedInstanceState != null) { 
      Log.d(tag, "SaveInstanceState is NOT NULL"); 
     } 
     setContentView(R.layout.activity_main); 

     FragmentManager fm = getSupportFragmentManager(); 
     mainFragment = new MainFragment(); 
     fm.beginTransaction().add(R.id.fragment_container, mainFragment, "MainFragment").commit(); 
    }  

MainFragment﹕ OnDestroy 
MainFragment﹕ OnDetach 
MainActivity﹕ OnDestroy 
MainFragment﹕ onAttach() <<< Getting called before Activity's onCreate() 
MainActivity﹕ OnCreate() 
MainActivity﹕ SaveInstanceState is NOT NULL 
MainFragment﹕ onCreateView() 
MainFragment﹕ SaveInstanceState is NOT NULL 
MainFragment﹕ onAttach() <<<<<< onAttach() on Fragment called again 
MainFragment﹕ onCreateView() <<<<<<< onCreateView() on Fragment again. 

回答

1

下面是片段的生命周期:

Here is the Fragment Lifecycle

根据您的问题,当屏幕旋转时,则意味着片段和活动需要重新加载或“重建”。如果你遵循生命周期图像,你会看到碎片首先被销毁(因为它被旋转了),然后被分离。该活动接下来分离。

然后附加片段(该片段是在Activity之前调用的对象)。此后,创建活动。

阅读Android docs以获得更好的理解,但上面的回答是您的疑问。