ViewPager2使用過程中Fragment的生命周期


offscreenPageLimit = 0 的情況

此種情況表示不會預先加載其他的Fragment,僅僅加載第一個Fragment,其生命周期如下:

Test fragment 0 onAttach 
Test fragment 0 onCreate 
Test fragment 0 onCreateView 
Test fragment 0 OnActivityCreated 
Test fragment 0 onStart 
Test fragment 0 onResume 

切換到其他的Fragment

這倆個Fragment的生命周期如下:

Test fragment 1 onAttach 
Test fragment 1 onCreate 
Test fragment 1 onCreateView 
Test fragment 1 OnActivityCreated 
Test fragment 1 onStart 
Test fragment 0 onPause 
Test fragment 1 onResume 

等第二個Fragment執行到onStart后,執行第一個Fragment的onPause函數。

返回到原來的Fragment

前后兩個Fragment的生命周期如下:

Test fragment 1 onPause 
Test fragment 0 onResume

先執行當前Fragment的onPause函數,然后執行原來的Fragment的onResume函數。

offscreenPageLimit != 0 的情況

此種情況將會根據offscreenPageLimit的值加載不可見的Fragment,這幾個Fragment的生命周如下:

Test fragment 0 onAttach 
Test fragment 0 onCreate 
Test fragment 0 onCreateView 
Test fragment 0 OnActivityCreated 
Test fragment 0 onStart 
Test fragment 0 onResume 
Test fragment 1 onAttach 
Test fragment 1 onCreate 
Test fragment 1 onCreateView 
Test fragment 1 OnActivityCreated 
Test fragment 1 onStart 
Test fragment 2 onAttach 
Test fragment 2 onCreate 
Test fragment 2 onCreateView 
Test fragment 2 OnActivityCreated 
Test fragment 2 onStart 

這幾個Fragment會依次執行其生命周期,但是只有可見的Fragment執行到了onResume函數。

Container Fragment及Child Fragment的生命周期

Child Fragment入棧

入棧調用的是replace()函數。

commitChildFragment操作在Container Fragment的onCreateView函數中執行,這兩個Fragment的生命周期如下:

container fragment onAttach
container fragment onCreate
container fragment onCreateView
container fragment onActivityCreated
Child fragment 0 onAttach 
Child fragment 0 onCreate 
Child fragment 0 onCreateView
Child fragment 0 OnActivityCreated 
container fragment onStart
Child fragment 0 onStart 
container fragment onResume
Child fragment 0 onResume 

雖然commitChildFragmentonCreateView執行,但是child Fragment真正地開始執行生命周期是在container FragmentonActivityCreated函數之后。

Child Fragment 再入棧

前后兩個Fragment生命周期如下,Child Fragment 0先入棧,Child Fragment 1后入棧。

Child fragment 1 onAttach 
Child fragment 1 onCreate 
Child fragment 0 onPause 
Child fragment 0 onStop 
Child fragment 0 onDestroyView 
Child Fragment 1 onCreateView
Child fragment 1 OnActivityCreated 
Child fragment 1 onStart 
Child fragment 1 onResume 

Child Fragment 出棧

Child fragment 1 onPause 
Child fragment 1 onStop 
Child fragment 1 onDestroyView 
Child fragment 1 onDestroy 
Child fragment 1 onDetach 
Child fragment 0 onCreateView
Child fragment 0 OnActivityCreated 
Child fragment 0 onStart 
Child fragment 0 onResume 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM