1. 程式人生 > >Android複習之旅--Activity/Service/Fragment 生命週期

Android複習之旅--Activity/Service/Fragment 生命週期

Activity的生命週期

Activity_Image.png

onCreate(Bundle savedlnstanceState) --> 初始化,僅僅被呼叫一次
onStart()  --> 開始
onRestart() --> 重置
onResume()  --> 獲取焦點
onPause() --> 暫停
onStop() --> 停止
onDestroy() --> 銷燬

開始Activity:在這個階段依次執行3個生命週期的方法

onCreate() –> onStart() –> onResume()

Activity失去焦點:如果Activity失去焦點,會依次執行2個生命週期的方法

onPause() –> onStop()

Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命週期的方法

onRestart() –> onStart() –> onResume()

關閉Activity:當Activity被關閉時會依次執行3個生命週期的方法

onPause() –> onStop() –> onDestroy()

橫豎屏切換的生命週期

Activity onDestory() –> onCreate() –> onStart() –> onResume()


Service的生命週期

Service_Image.png

onCreate() --> 初始化,第一次startService時呼叫
onStartCommand() --> 啟動
onBind() --> 繫結
onUnbind() --> 解綁
onDestory() --> 銷燬

在Service每一次的開啟關閉過程中,只有onStartCommand()可被多次呼叫(通過多次startService()呼叫),其他onCreate(),onBind(),onUnbind(),onDestory()在一個生命週期中只能被呼叫一次。

對於startService()服務:

onCreate() –> onStartCommand()
如果context.stopService() –> onDestory()

對於bindService()服務:

onCreate() –> onBind()
如果Activity被銷燬 –> onUnbind() –> onDestory()


Fragment的生命週期

Fragment_Image.png

onAttach() --> 當Fragment被加入Activity時呼叫,可以獲得Activity傳遞的值
onCreate() --> 例項化成員變數
onCreateView() --> 給當前Fragment繪製UI佈局,可以使用執行緒更新UI
onActivityCreated() --> 表示Activity執行onCreate()方法完成時呼叫
onStart() --> 開始
onResume() --> 獲得焦點
onPause() --> 暫停
onStop() --> 停止
onDestoryView() --> 表示Fragment銷燬相關聯的UI佈局
onDestory() --> 銷燬Fragment物件
onDetach() --> 脫離Activity

一旦Activity進入resumed狀態(也就是running狀態),你就可以自由地新增和刪除Fragment了。因此,只有當Activity在resumed狀態時,Fragment的生命週期才能獨立的運轉,其它時候是依賴於Activity的生命週期變化的。

contrast_Image.png

當一個Fragment被建立時

onAttach() –> onCreate() –> onCreateView() –> onActivityCreated()

當這個Fragment對使用者可見時

onStart() –> onResume()

當這個Fragment進入“後臺模式”的時候

onPause() –> onStop()

當這個Fragment被銷燬(或持有它的Activity被銷燬)時

onPause() –> onStop() –> onDestoryView() –> onDestory() –> onDetach()