猎豹国内技术负责人梁炳辉 - Android应用启动速度和内存优化实践

抄晓凡

2017/11/14 发布于 技术 分类

随着产品的持续交付,Android应用体量变得越来越大,操作卡顿、内存爆涨、启动时间太长等性能问题也随之而来。有哪些方法可以快速定位来解决问题?如何用最小代价提高运行速度,减少应用内存占用?有哪些具体可操作性的优化手段? 本次分享将以猎豹安全大师为例,讲解在优化启动速度和内存的过程中遇到哪些问题、踩过哪些坑,以及我们实践过的有效解决方案。

文字内容
1. Android应用 启动速度和内存优化实践 梁炳辉 / 猎豹安全大师 CN
2. 猎豹移动 猎豹移动(NYSE: CMCM),于2010年10月由金山安全和可牛影像合并而成,继承了 金山17年的安全技术积累和可牛影像的互联网基因,是GP全球非游戏类应用榜单排名 第三的移动应用开发商。致力于为全球的移动用户提供更快速,更易用,更安全的移动 互联网体验。截至2016年12月,猎豹移动产品在全球范围内安装量达38.10亿,全球移 动端月活跃用户高达6.23亿。公司核心产品包括猎豹清理大师、猎豹安全大师等。
3. 猎豹安全大师 CN 最值得信赖的病毒查杀和隐私保护工具(原金山手机毒霸) 1.0 à 2.0 à 3.0 à 4.0
4. 为什么要做 启动速度优化
5. 轻快的体验 中低端手机 安心的保护
6. 目标 ü 以用户体验为核心(用户至上) ü 中低端手机也能有高端手机一样的轻快体验 ü 提高用户尝试使用其他功能的兴趣 ü 产品留存
7. 我们能做什么?
8. 主流程 开屏页 à 主页 à 扫描页 à 风险页 à 结果页
11. 关键环节 ü Application初始化 ü 首屏Activity的渲染
12. 欲善其事,先利其器 Strict Mode Layout Inspector Hierarchy Viewer Trace View AspectJ
13. 启动过程分析
14. CMS 3.0 优化效果 ü 启动耗时的系统版本两级分化很大 ü 低端机型平均耗时:5秒 à 2秒 ü 中高端机型平均耗时:3秒 à 1.2秒 ü 平均耗时:1.8秒 耗时区间 1秒内 2秒内 3秒内 4秒内 5秒内 1秒内 1至2秒 2至3秒 36.75% 39.31% 10.90% 76.06% 86.96% 92.58% 94.89% 3至4秒 5.62% 4至5秒 2.31% 大于5秒 5.11%
15. 方法一:精简布局 越少越好 ü 布局层次 ü 控件元素 ü 过度绘制
16. 过度渲染 极简布局
17. 方法二:少用图片 无图界面 ü Drawable/自绘 ü 文字替代单色图 ü 自绘控件
18. 简单 极致
19. 方法三:异步加载 专用车道 ü 插件框架 ü 执行顺序 ü 主线程刷新 ü 其他
20. 方法四:延迟加载 错峰出行 ü ViewStub ü PostDelayed ü onFirstFrameDrawn
21. 总结 界面元素/层级 越少越好 主界面尽量 少用图片 主线程业务走 专用车道 非紧急业务 错峰出行
22. App性能优化 还要做什么?
23. 内存优化方法 使用更加轻量的数据结构 使用更小的图片 复用系统自带资源 注意Cursor对象是否及时关闭 特别留意单例对象不合理的持有 … AS Memory Monitor LeakCanary MAT
24. 如何做到立竿见影?
25. 基本原则 抓大放小
26. string byte[ ]
27. 一张图片到底有多耗内存? 问题:640 x 378的PNG图片需要多少内存
28. 图片内存计算方法 res xhdpi xxhdpi xxxhdpi 分辨率 720x1280 1080x1920 1440x2560 DensityDPI 320 480 640 机型 Galaxy Nexus Nexus 5 Nexus 6 scale = (float) screenDensity / bitmapDensity scaledWidth = int(bitmapWidth * scale + 0.5f) scaledHeight = int(bitmapHeight * scale + 0.5f) bytes = scaledWidth * scaledHeight * bytesPerPixel 机型1:Galaxy Nexus 945KB screenDensity(320), xhdpi(320), bitmap(640*378) 机型2:Nexus 6 3.7MB screenDensity(640), xhdpi(320), bitmap(640*378)
29. 图片使用原则一:使用.9,保证其足够精简 à 230KB 100K 230KB à 11KB
30. 图片使用原则二:化大为小,化繁为简
31. 图片使用原则三:用小图或者不用图
32. 文字替换单色图片
33. 图片使用原则四:尽量使用RGB565 RGB565 450KB ARGB8888 900KB
34. 图片使用原则五:Bitmap内存复用 à
35. 总结 使用.9,尽量保证其足够精简 化大为小,化繁为简 用小图或者不用图 文字替换单色图片 尽量使用RGB565 Bitmap内存尽量复用 内存中保存压缩后的图片 用完及时释放图片内存
36. 系统/无源码模块内存泄漏 ü WebView内存泄漏 ü 第三方服务内存泄漏 ü 特殊场景功能
37. 三进程模型
38. OneTime 进程
39. 内存优化的其他关键路径 找出图片内存大户并优化 找出废弃逻辑代码并删除 找出执行过程耗费大量内存、具备一次性性质的逻辑迁到临时进程 无法解决泄漏(如WebView)移至其他进程 坚决防止Activity内存泄漏 GC是非常耗时的操作,使用越少内存程序越流畅。
40. 核心思想 不做事情肯定不耗费内存
41. Q&A
42. THANK YOU