一直以來使用ViewPager時(shí)都感覺生命周期紊亂奔害,今天閑下來吓肋,搞清楚到底咋回事
1、Fragment搭配ViewPager
這個(gè)是當(dāng)前使用頻率最高的組合异雁。以下均使用ViewPager默認(rèn)緩存頁數(shù)1頁捶障。
搭配一:FragmentPagerAdapter
每一個(gè)創(chuàng)建的Fragment會(huì)緩存在內(nèi)存中, 常用于引導(dǎo)頁纲刀,tab頁等固定頁面數(shù)量較少的
搭配二:FragmentStatePagerAdapter使用项炼。
緩存外的頁面會(huì)被銷毀,常用于動(dòng)態(tài)添加頁面示绊,頁面數(shù)量較多的
此種情況锭部,不緩存的直接銷毀,需要恢復(fù)的重新創(chuàng)建耻台。
總結(jié):
1空免、需要特別注意的是:第0頁初次創(chuàng)建,是先調(diào)用setUserVisibleHint方法盆耽,后調(diào)用onCreateView蹋砚,但是此頁在onCreateView里getUserVisibleHint()為true;后續(xù)頁面正常摄杂,先調(diào)用onCreateView坝咐,后調(diào)用setUserVisibleHint。此處不清楚析恢,fragment懶加載時(shí)很容易出錯(cuò)墨坚。
2、在兩頭(第0頁和最后一頁)映挂,當(dāng)前有效頁數(shù)都是兩個(gè)泽篮,中間的有效頁數(shù)為3個(gè),左右各一個(gè)柑船。
3帽撑、使用FragmentPagerAdapter,應(yīng)該用變量存下View,恢復(fù)時(shí)候可以判斷非空就復(fù)用鞍时,避免重復(fù)inflate或者創(chuàng)建造成資源浪費(fèi)亏拉。
2、Fragment獨(dú)立使用
此時(shí)生命周期跟Activity一樣逆巍,沒什么特別的及塘,很單純的正常創(chuàng)建。值得一提的是這種情況下setUserVisibleHint方法是不會(huì)被調(diào)用的锐极,此方法只有在PagerAdapter這樣一組Fragment中才會(huì)被調(diào)用笙僚。