多fragment內存優化

類似新聞內容頁,viewpager加載多個fragment並且經常切換的需求,這種情況下的內存需要特別注意,一不小心處理不當很容易出現內存暴漲,頻繁觸發gc頁面卡頓,甚至oom的情況,針對這種需求總結下面幾點注意事項

注意事項

1.採用FragmentStatePagerAdapter
    FragmentStatePagerAdapter和FragmentPagerAdapter的主要區別是:
        FragmentStatePagerAdapter會及時回收fragment
        而FragmentPagerAdapter會把fragment一直放在內存當中
    那麼在當前需求下肯定是要用FragmentStatePagerAdapter比較合適
2.FragmentStatePagerAdapter設置contentVp.setOffscreenPageLimit(1);
    這個設置是防止viewpager緩存過多的fragment但是不用設置成0
    因爲設置0默認最小值1
3.懶加載的問題上一篇說過了:
    https://blog.csdn.net/random_7474/article/details/81205513
4.需要特別注意的一點,雖然很小的細節但是坑了我足有兩天···
    我們通常喜歡把所有的Fragment new出來然後放在一個list裏面
    在adapter的getItem(int position)的時候在用list.get(position)來返回fragment
    在這個需求下面是不行的,會導致fragment無法回收一直佔用內存,我現在的方案是:
    在adapter的getItem(int position)的時候直接return NewsContentFragment.getInstance()
    也就是直接new

當前方案解決了問題,內存中只存在3個NewsContentFragment,並且配合懶加載不會加載下一個fragment的數據

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