2016-01-24 104 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以獲得更好的理解,但上面的回答是您的疑問。