ZhaoSiBo / OOM

关于项目中的内存泄漏,内存溢出,集中管理,集中解决,分享解决经历和问题本质

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

内存泄漏溢出实战

关于项目中的内存泄漏,内存溢出,集中管理,集中解决,分享解决经历和问题本质

目前状态

因为目前的项目需属于电商类项目,所以需要加载大量的图片,并且在首页存在一个多Bitmap缓存的自定义View,导致经常出现内存的抖动,溢出等情况,再加上Leakcanay在Debug开发过程中,提示存在内存泄漏的情况,所以决定把项目中的内存泄漏,溢出等问题集中解决一下

内存泄漏

  1. 使用LeakCanary检测,使用闪验SDK的位置,内存泄漏 LoginSelectorActivity无法回收

  2. 使用LeakCanary检测,TagListActivity位置,内存泄漏 因为线程,在Subscribe方法中,被持有,taglistActvity内存泄漏

View优化

  1. 项目中的Gif没有绑定生命周期,导致在已经脱离屏幕外之后依然处于加载绘制状态, 导致GPU一直在走渲染功能

  2. 项目中的首页自定义控件没有绑定RecyclerView没有绑定滑动状态监听,导致在移除屏幕后,还会调用GPU渲染

  3. 项目中的PageLayout布局管理器类,是实现懒加载的过程中,只实现了数据的懒加载,而不是布局的懒加载(推荐使用ViewStub)倒是Lottie动画在Fragment创建过程中就要一直进行绘制工作,直到所有Fragment走完加载过程,销毁掉lottie动画才能避免绘制

内存峰值优化

  1. 商品加载列表的图片向下取样没有生效,导致加载图片过大,重新修改API
  2. bitmap的使用过多使用8888,使用565
  3. 前两点修改完之后内存峰值下降很快(Native内存峰值下降百分之五十)

About

关于项目中的内存泄漏,内存溢出,集中管理,集中解决,分享解决经历和问题本质