ezbuy Android APP 内存占用优化

1,749 阅读3分钟

来源:APP研发 - 王俊

一、为什么需要优化内存

主站app 经常运行内存超过600M ,导致时间久了容易出现卡顿现象;虽然 Java 对内存的释放有垃圾自动回收机制,但是实际开发中,不再用到的对象因为被错误引用会导致无法回收,从而造成内存泄漏,甚至内存溢出 OOM(OutOfMemory),程序崩溃。

二、App 内存使用情况

由于每个app分配到的内存使用情况是不一样的 ,我们可以通过使用adb分析出当前app 内存使用情况

//dvm最大可用内存:
adb shell getprop | grep dalvik.vm.heapsize

//单个app最大可用内存:
adb shell getprop|grep heapgrowthlimit

图片描述

我们可以看一下我们自己的主站App 内存使用的大体情况

adb shell dumpsys meminfo com.daigou.sg.debug.debug

图片描述

Heap Size: Dalvik Heap总共的内存大小 【eg.当前的内存为213504/1024 = 208M】
Heap Alloc:所有应用实例分配的内存,包括了应用从zygote共享分享的内存
Heap Free: 空闲的内存
#注:这些内存会根据app使用的情况来分配的,并不是不变的

二、如何检测

1、使用LeakCanary检查内存泄露

Android 内存泄漏检测库:github.com/square/leak…

  • 用户登录内存泄露

图片描述

移除LoginOauthFragment里的全局常量; 优化LoginOauthFragment里EzloadingDialog 销毁还持有activity引用

目前来看我们的app通过leakCanary只检测到这一出内存泄露,其他地方还没有发现。

2.利用 Android Profiler检测内存泄露

  • ProductActivity 商品详情页面数据处理优化

优化前

图片描述

优化后

图片描述

使用前平均占用内存在500M以上。主要原因是商品详情页网络请求没有绑定生命周期,导致请求数据尚未加载出来的情况下,关闭当前的Activity产生P层持有V层的引用,GC无法回收。另外的是在ProductPresenter 的 getProductData() 获取数据后的数据解析,存在耗时任务在UI线程中操作,导致内存使用上升以及页面短暂性的卡顿,通过协程挂起在IO线程中操作耗时任务优化内存使用,降低内存使用大概 30M上下。

使用MAT分析高内存占用的原因

  • 首页和类目以及搜索结果页

图片描述

图片描述

图片描述

图片描述

我们发现String占用的内存一直是最高了,通过MAT的histogram我们分析到了开发环境内存占用很高的原因是ChuckHelper这个日志库记录日志,导致app运存一直占用很高,大概在 38M左右,通过禁用掉这个日志库我们发现这个内存占用确实小了很多。

使用Profile分析优化app内存

  • 首页tab bitmap在退出app 后没有得到及时释放

图片描述

 @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
        if (drawables != null && drawables.length > 0) {
            for (Bitmap[] drawable : drawables) {
                for (Bitmap bitmap : drawable) {
                    if (bitmap != null && !bitmap.isRecycled()) {
                        bitmap.recycle();
                    }
                }
            }
            drawables = null;
        }
        TabUtil.clearTabs();
    }

通过手动销毁bitmap以及将 TabIconEntity 置空将内存及时释放掉

图片描述

释放后就没有 TabIconEntity 引用了。

Lint 去除无用的代码和静态资源

图片描述

图片描述

总计移除66无用的资源

总体优化后的内存占用

优化前

图片描述

优化后

图片描述