Activity和Fragment回調研究
所有回調
Activity
- onCreate : 第一次創建的時候執行
- onContentChanged : 當Activity的佈局改動時,即setContentView()或者addContentView()方法執行完畢時就會調用該方法
- onStart : 緊跟onCreate之後啓動
- onRestart :當前Activity從不可見重新變爲可見的狀態時onRestart就會被調用
- onPostCreate :onCreate方法徹底執行完畢的回調
- onResume :窗口可見,並且即將與用戶交互
- onPostResume :onResume方法徹底執行完畢的回調
- onPause : 整個窗口被半遮蓋或者半透明的時候會執行
- onStop : 整個窗口被完全遮蓋纔會觸發
- onDestroy : Activity即將被銷燬,這是Activity生命週期的最後一個回調
程序啓動運行並結束上述生命週期的方法執行順序是這樣的:
onCreate –> onContentChanged –> onStart –> onPostCreate –> onResume –> onPostResume –> onPause –> onStop –> onDestroy
Fragment
onAttach 在Fragment與其Activity關聯之後調用
onCreate 該fragmet還沒有獲得Activity的onCreate()已完成的通知,所以不能將依賴於Activity視圖層次結構存在性的代碼放入此回調方法中
onCreateView 爲Fragment加載佈局時調用。
onViewCreated 緊跟OnCreateView之後被調用
onActivityCreated : 當Activity的onCreate()方法執行完之後,調用這個回調方法。
onStart()\onResume()\onPause()\onStop()回調方法將和Activity的回調方法進行綁定,
onStart
onResume
onPause
onStop
onDestroyView Fragment中的佈局被移除時調用。
onDestroy 不再使用Fragment時調用,Fragment仍然附加到Activity並可以找到,但是不能執行其他操作
onDetach Fragme 當從Activity中解除Fragment的關聯時,調用這個回調方法。
調用示例
沒有加回退棧
- 打開一個附着Fragment的Activity
MainActivity: onCreate~~
Fragment1: onAttach
Fragment1: onCreate
Fragment1: onCreateView
Fragment1: onViewCreated
Fragment1: onActivityCreated
Fragment1: onStart
MainActivity: onStart~~~
MainActivity: onResume~~~
Fragment1: onResume
- 點擊切換到另一個Fragment
Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment1: onDestroy
Fragment1: onDetach
Fragment2: onAttach
Fragment2: onCreate
Fragment2: onCreateView
Fragment2: onViewCreated
Fragment2: onActivityCreated
Fragment2: onStart
Fragment2: onResume
- 關閉Activity
Fragment2: onPause
MainActivity: onPause~~~
Fragment2: onStop
MainActivity: onStop~~~
Fragment2: onDestroyView
Fragment2: onDestroy
Fragment2: onDetach
MainActivity: onDestroy~~~
- 打開一個Activity
Fragment1: onPause
MainActivity: onPause~~~
Activity2: onCreate
Activity2: onStart~~~
Activity2: onResume~~~
Fragment1: onStop
MainActivity: onStop~~~
- 打開另一個附着Fragment的Activity
Fragment1: onPause
MainActivity: onPause~~~
Activity2: onCreate
Fragment3: onAttach
Fragment3: onCreate
Fragment3: onCreateView
Fragment3: onViewCreated
Fragment3: onActivityCreated
Fragment3: onStart
Activity2: onStart~~~
Activity2: onResume~~~
Fragment3: onResume
Fragment1: onStop
MainActivity: onStop~~~
- 回到之前的Activity
Fragment3: onPause
Activity2: onPause~~~
MainActivity: onRestart~~~
Fragment1: onStart
MainActivity: onStart~~~
MainActivity: onResume~~~
Fragment1: onResume
Fragment3: onStop
Activity2: onStop~~~
Fragment3: onDestroyView
Fragment3: onDestroy
Fragment3: onDetach
Activity2: onDestroy~~~
加了回退棧(反註冊沒了啊啊)
- 打開activity
MainActivity: onCreate
Fragment1: onAttach
Fragment1: onCreate
Fragment1: onCreateView
Fragment1: onViewCreated
Fragment1: register
Fragment1: onActivityCreated
Fragment1: onStart
MainActivity: onStart~~~
MainActivity: onResume~~~
- 切換Fragment
Fragment1: onResume
Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment2: onAttach
Fragment2: onCreate
Fragment2: onCreateView
Fragment2: onViewCreated
Fragment2: onActivityCreated
Fragment2: onStart
Fragment2: onResume
- 切換回原Fragment
Fragment2: onResume
Fragment2: onPause
Fragment2: onStop
Fragment2: onDestroyView
Fragment1: onCreateView
Fragment1: onViewCreated
Fragment1: register
Fragment1: onActivityCreated
Fragment1: onStart
Fragment1: onResume
可見:onAttach、onCreate、ondestroy和ondetach沒有調用