Android四大元件之Activity篇

HFW發表於2019-03-13

前言

以前學習的Android知識雜亂無章,形成不了一個完整的知識體系,因此打算根據知識星球的內容,完整的過一遍,首先來學習一下Activity。Activity是Android四大元件中最為重要的一個,負責直接與使用者互動,先來看看Activity的生命週期

一、生命週期

官方文件給出了下面這個圖

Android四大元件之Activity篇

  1. onCreate(Bundle) 是Activity中除了attachBaseContext以外的第一個回撥方法,該方法一般用於呼叫setContentView
  2. onStart() 當Activity可見時回撥,注意可見不代表Activity的UI被顯示出來,因為View的三大流程需要在onResume回撥完後才會開始
  3. onResume() 當Activity獲得了焦點後回撥(開始可以與使用者互動),同樣的,Activity的UI也沒被顯示出來,因此在該方法中直接獲取View的寬高拿到的都是0,回撥完該方法Activity就處於執行狀態了
  4. onPause() 當Activity失去了焦點後回撥,該方法後面可能會呼叫onStop、onResume或者可能被系統殺死
  5. onStop() 當Activity不可見時回撥,該方法後面可能會呼叫onDestoryonRestart或者可能被系統殺死
  6. onRestart() 當Activity處於stop狀態後,又被切換到的前臺時回撥,該方法後面緊跟著onStart回撥
  7. onDestroy() 當Activity將要被銷燬後呼叫,可能的情況是finish方法被呼叫或者配置改變時(沒有配置configChange)時回撥,該回撥中可以做一些資源回收等操作

重點

  • 當Activity A啟動一個透明的Activity或者一個Dialog主題的Activity時,A的onStop不會呼叫,因為其還可見
  • 當Activity A開啟一個Dialog,不會呼叫A的任何生命週期方法
  • 當Activity A開啟Activity B會呼叫A.onPause - B.onCreate - B.onStart - B.Resume - A.onStop(視情況,當A完全不可見時會呼叫)
  • 當Activity A啟動Activity B然後點選back鍵會回撥B.onPause - (如果A處於stop狀態還有A.onRestart - A.start)A.onResume - B.onStop
  • 當Activity A失去焦點後,當記憶體不足時系統可能會將A殺死,當點選回退後會呼叫A的onCreate - onStart - onResume進行重建

二、Fragment的生命週期與Activity的關係

首先來看看Fragment的生命週期

  1. onAttach(Activity) 當Fragment與Activity建立聯絡時呼叫
  2. onCreate(Bundle) 當初始化建立Fragment的時候回撥
  3. onCreateView(LayoutInflate, ViewGroup, Bundle) 建立和返回Fragment顯示的根View
  4. onActivityCreated(Bundle) 當與Fragment相聯絡的Activity完成了onCreate回撥
  5. onStart() 當Fragment可見時回撥
  6. onResume() 當Fragment獲取焦點時回撥
  7. onPause() 當Fragment失去焦點時回撥
  8. onStop() 當Fragment不再可見時回撥
  9. onDestoryView() 用於清除與Fragment相關聯View的資源
  10. onDestory() 當Fragment將要被銷燬時呼叫
  11. onDetach() 當呼叫該方法後Fragment就與Activity失去聯絡了

將設有Activity A在onCreate通過Replace方顯示了Fragment F,生命週期呼叫順序為A.onCreate - A.onStart - F.onAttach - F.onCreate - F.onCreateView - F.onViewCreate - F.onActivityCreate - F.onStart - A.onResume - F.onResume

三、Activity與menu建立先後順序

在Activity的onResume呼叫完後會回撥onCreateOptionMenu來建立Menu

四、使用onSavedInstanceState()和onRestoreInstanceState()儲存狀態

  • onSavedInstanceState 當Activity被意外的殺死或者是當配置方式改變後會回撥onSavedInstanceState(在API28及以上其呼叫時機在onStop之後,在API28之前呼叫時機onStop之前與onPause無時序關係)

  • onRestoreInstanceState 再次啟動後我們可以在onRestoreInstanceState中恢復onSavedInstanceState儲存的資料

相關文章