我是如何通过 nimbledroid 做android app性能优化的

简介

目前我负责开发的360 hola weather项目, 收到了360 OS的一个性能要求反馈, 一是要求apk size < 10 MB, 目前是12.2MB, 二是要求内存占用 < 42MB.

NimbleDroid 是美国哥伦比亚大学的博士创业团队研发出来的分析Android app性能指标的系统,分析的方式有静态和动态两种方式,
其中静态分析可以分析出APK安装包中大文件排行榜,各种知名SDK的大小以及占代码整体的比例。
动态分析可以给出冷启动时间, 列出block UI的具体方法, 内存占用, 以及Hot Methods, 从这些分析报告中, 可以定位出具体的优化点.

使用方法其实很简单, 只需要上传你apk, 网站后台会自动分析, 并给出直观化的分析报告.


屏幕快照 2018-03-21 上午11.03.06.png
apk文件大小优化

首先, 查看apk中的文件大小排行榜.
从中, 可以非常明显的看到一些图片png文件的使用是不当的.

屏幕快照 2018-03-21 上午11.03.47.png

非常简单的通过tinypng网站进行处理后, 就可以得到非常好的优化效果.


屏幕快照 2018-03-21 上午11.24.44.png

初步优化后的apk文件大小已经满足了360OS的要求.


屏幕快照 2018-03-21 下午6.45.02.png

这是从资源文件的角度入手, 从代码角度优化, 可以查看报告中的方法数报告. 从中可以快速定位出项目使用各个SDK的情况, 从中寻找优化空间.

屏幕快照 2018-03-21 上午11.09.15.png
冷启动优化
屏幕快照 2018-03-21 上午11.11.00.png

这里给出了 8 个导致冷启动慢的原因点. 优秀app的冷启动时间应该控制在2秒内, 目前是2.8秒, 超出了800毫秒.

Real Time 2.8 seconds0.80 seconds longer than max recommended time.

查看详情报告, 可以看到block UI的具体方法名.

屏幕快照 2018-03-21 上午11.11.16.png

之前在浏览器部门, 阅读chrome源码, google用到了

        Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
            @Override
            public boolean queueIdle() {
                return false;
            }
        });

来优化页面的启动速度. 这里正好可以用到. 把一些方法抽取出来. 在页面绘制后, 等到UI线程空闲的时候, 再去执行这些耗时方法.


屏幕快照 2018-03-21 下午6.59.35.png
优化后的结果
屏幕快照 2018-03-21 下午7.35.24.png
屏幕快照 2018-03-21 下午7.36.25.png

冷启动优化了300ms出来.

---DONE.---

推荐阅读更多精彩内容