记录ViewPager+fragment 内存泄露问题

 

 

首先是检测内存泄露的最大利器:Leakcanary

依赖和接入很是简单:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
// Optional, if you use support library fragments:
debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'

在自己application里面

 if (LeakCanary.isInAnalyzerProcess(this)) {
      return;
 }
 LeakCanary.install(this);

然后就可以开始了... 先看看问题:

                  

一共两种泄露直接看图

记录ViewPager+fragment 内存泄露问题_第1张图片 记录ViewPager+fragment 内存泄露问题_第2张图片

第一张图咱们明显看出来是ViewPager的问题,而且只看到MainActivity里的mViewPager别的都看不到

第二种可以看见是MainActivity里的MFragments的问题,然后就找到TestFragment了

我首先想到就是fragment里有什么东西给泄露了?然后看了看代码

记录ViewPager+fragment 内存泄露问题_第3张图片

明显没什么问题呀,那只能是mFragments的问题了呗

但是我在测试修改

mViewPager.setOffscreenPageLimit(1);

mViewPager.setOffscreenPageLimit(4);

就不会出现问题了,跟1和4有关系的只能是ViewPager里的fragment回收的问题了

会不会跟adapter有关系?看了看代码貌似没啥问题呀:

记录ViewPager+fragment 内存泄露问题_第4张图片

然后百度google了一通发现一篇文章

viewpager + fragment+FragmentStatePagerAdapter中用List存放多个Fragment 造成的内存泄漏

see了一see 貌似问题就是出现在adapter 然后按照人家说法改一下试一试

记录ViewPager+fragment 内存泄露问题_第5张图片

记录ViewPager+fragment 内存泄露问题_第6张图片

github传送门:ViewPagerDemo

另外还有fragment懒加载+mvp+okhttp+retrofit的demo:NetRequestDemo

你可能感兴趣的:(记录ViewPager+fragment 内存泄露问题)