Fragment(Activity優化)

Fragment必須被寫成可重用的模塊。因爲fragment有自己的layout,自己進行事件響應,擁有自己的生命週期和行爲,所以你可以在多個activity中包含同一個Fragment的不同實例

例如:寫一個讀新聞的程序,可以用一個fragment顯示標題列表,另一個fragment顯示選中標題的內容,這兩個fragment都在一個 activity上,並排顯示。那麼這兩個fragment都有自己的生命週期並響應自己感興趣的事件。於是,不需再像手機上那樣用一個activity 顯示標題列表,用另一個activity顯示新聞內容;現在可以把兩者放在一個activity上同時顯示出來。如下圖:

 

 

 

處理fragement的生命週期

 

管理fragment的生命週期有些像管理activity的生命週期。Fragment可以生存在三種狀態:

Java代碼  收藏代碼
  1. Resumed:  
  2.   
  3. Fragment在一個運行中的activity中並且可見。  
  4.   
  5. Paused:  
  6.   
  7. 另一個activity處於最頂層,但是fragment所在的activity並沒有被完全覆蓋(頂層的activity是半透明的或不佔據整個屏幕)。  
  8.   
  9. Stoped:  
  10.   
  11. Fragment不可見。可能是它所在的activity處於stoped狀態或是fragment被刪除並添加到後退棧中了。此狀態的fragment仍然存在於內存中。  

 

同樣類似於activity,你可以把fragment的狀態保存在一個Bundle中,在activity被recreated時就需用到這個東西。你可以在onSaveInstanceState()方法中保存狀態並在onCreate()或onCreateView()或 onActivityCreated()中恢復,關於更多的保存狀態的信息,請參考Activitys章節。

Fragment與Activity的生命週期中最大的不同就是存儲到後退棧中的過程。Activity是在停止時自動被系統壓入停止棧,並且這個棧是被系統管理的;而fragment是被壓入activity所管理的一個後退棧,並且只有你在刪除fragment後並明確調用 addToBackStack()方法時才被壓入。

然而,管理fragment的生命週期與管理activity的生命週期極其相似。你所需要去思考的是activity的生命週期如何影響fragment的生命週期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章