標籤:
在上一篇博文中對Fragment做了簡單的介紹,現在再來探討一下Fragment的生命週期。
一、Fragment的幾種狀態:
與Activity類似,Fragment也有一下幾種狀態:
· 活動狀態:當前Fragment位於前台,可見,可獲得焦點。
· 暫停狀態:其他Activity位於前台,該Fragment可見,不可獲得焦點。
· 停止狀態:不可見,失去焦點。
· 銷毀狀態:該Fragment被完全刪除或被結束。
二、Fragment的回調方法:
在Fragment的生命週期中,有一下方法會被回調:
· onAttach():當Fragment被添加到Activity時被回調,只回調一次。
· onCreate(Bundle savedStatus):建立Fragment時被回調,一次。
· onCreateView(): 每次建立、繪製該Fragment的View組件時回調,Fragment將會顯示該方法返回的View組件。
· onActivityCreated():Fragment所在的Activity啟動完成後回調。
· onStart():每次啟動或恢複Fragment時被回調。
· onResume():每次啟動或恢複Fragment時被回調,onStart()回調後就會回調此方法。
· onPause():暫停時回調。
· onStop():停止Fragment時回調。
· onDestroyView():銷毀Fragment的View組件時回調。
· onDestroy():銷毀Fragment時調用,一次。
· onDetach():將Fragment從Activity中刪除、被替換完成時回到該方法,在onDestroy()之後回調。
根據以上方法被回調的時機,我們可以根據需要選擇性的覆蓋指定方法。從而實現相關需求。
三、Fragment生命週期執行個體
下面代碼是Fragment生命週期的例子,重寫了以上十一個生命週期方法:
1 @SuppressLint("NewApi") 2 public class MyFragment extends Fragment { 3 Button bnOk; 4 TextView tvShow; 5 private final String TAG = "MyFragment"; 6 7 public MyFragment(){ 8 System.out.println(TAG + ":MyFragment()"); 9 }10 11 @Override12 public void onAttach(Activity activity) {13 super.onAttach(activity);14 System.out.println(TAG + ":onAttach()");15 }16 17 @Override18 public void onCreate(Bundle savedInstanceState) {19 super.onCreate(savedInstanceState);20 System.out.println(TAG + ":onCreate()");21 22 }23 //重寫改方法,傳回值View將作為Fragment顯示的組件24 @Override25 public View onCreateView(LayoutInflater inflater, ViewGroup container,26 Bundle savedInstanceState) {27 System.out.println(TAG + ":onCreateView()");28 //載入fragment_main.xml布局檔案29 View rootView = inflater.inflate(R.layout.fragment_main, container, false);30 return rootView;31 }32 33 @Override34 public void onActivityCreated(Bundle savedInstanceState) {35 super.onActivityCreated(savedInstanceState);36 System.out.println(TAG + ":onActivityCreated()");37 }38 39 @Override40 public void onStart() {41 super.onStart();42 System.out.println(TAG + ":onStart()");43 }44 45 @Override46 public void onResume() {47 super.onResume();48 System.out.println(TAG + ":onResume()");49 }50 51 @Override52 public void onPause() {53 super.onPause();54 System.out.println(TAG + ":onPause()");55 }56 57 @Override58 public void onStop() {59 super.onStop();60 System.out.println(TAG + ":onStop()");61 }62 63 @Override64 public void onDestroyView() {65 super.onDestroyView();66 System.out.println(TAG + ":onDestroyView()");67 }68 69 @Override70 public void onDestroy() {71 super.onDestroy();72 System.out.println(TAG + ":onDestroy()");73 }74 75 @Override76 public void onDetach() {77 super.onDetach();78 System.out.println(TAG + ":onDetach()");79 }80 81 }
下面我們來實驗一下並看日誌結果:
1、啟動Fragment日誌如下(請忽略黃色日誌):
2、息屏狀態下:
3、重新點亮螢幕:
4、退出:
其實還有更多的情況,著這裡就不一一實驗了。這個例子雖然很簡單,但能很好的反應了Fragment生命週期中各方法的回調時機。
Android進階編程筆記(六)Fragment的生命週期