Activity和Fragment回調研究

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沒有調用

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