Android应用性能优化和性能分析

Memory 分析和优化
有OOM发生但是没有现场保留

结合logcat和代码分析造成oom的泄漏点, 一般OOM 都是程序员自身每注意Handler, bitmap,以及对象相互引用等等造成的, 具体平时怎么防范可以参考【没有OOM发生Memory分析】

有OOM 发生但是有现场保留

现场有保留情况dump memory 和 查看 进程top 信息, 然后按照测试手法操作查看memory 信息, 结合操作和日志确认最终泄漏点

没有OOM发生Memory分析

OOM 产生一般都是程序员疏忽产生的, 以下分享一下自己对memory 的一些处理

  1. 代码每次书写完毕, 可以使用AS Profiler 分析一下对应memory, 一般比较常见的leak 都可以被发现


    Screenshot from 2021-08-01 15-36-12.png
  2. 操作apk 界面一段时间, 期间查看AS Profiler Memory 走形曲线, 如果曲线一直处于上升,GC 后也没有太大变化, 此时可以record 并查看对应memory分析文件

  3. 使用monkey 工具进行测试, 并记录对应进程的memory, cpu信息, 操作相对一段时间, 将产生的memory和cpu数据导成图形, 查看对应图形曲线, 结合对应时间点和monkey 操作进行分析

  4. 使用LeakCanary 等第三方工具, 具体使用流程网上有很多, 我这里就不多做介绍。

应用启动速度
分析应用启动优化点
  1. adb shell am start -W -S com.test.Myaplication/.MainActivity 该命令只能大致看到应用启动条件
  2. log过滤Displayed关键字
  3. 获得并分析trace 文件
// 进程启动时加入
 Debug.startMethodTracing("XXXTrace");
在自己想结束trace的地方加入
 // Debug.stopMethodTracing();
// 自己可以根据自己的需求进行trace 文件的记录, 分享一下我的做法
1. application onCreate 加入Debug.startMethodTracing("XXXTrace");
2. 第一帧上屏时结束
getWindow().getDecorView().post(() -> new Handler().post(() -> {
       Debug.stopMethodTracing();
})); 
// trace 文件地址
/sdcard/Android/data/包名/files/XXXXTrace.trace 

然后自己可以使用Chrome或者AS 分析产生的trace 文件, 分析对应组件的启动时间

  1. 关键点埋日志, 并计算执行时差, 这个也是最通用也最简单的方式
优化应用启用速度
  1. 使用懒加载, 建议数据在首帧上屏后再加载
  2. 有广告页的app, 可以利用广告页空隙进行预加载
  3. 禁止使用xml 加载帧数比较多的帧动画
  4. 采用分页加载
Apk 瘦身
  1. 网络加载图片, 图片尽量少预置
  2. 简单图片或者动画采用自定义view 或者 Vector 的方式加载
  3. 动态下载文件, 不要将文件轻易放到asset 中
  4. 引入第三方库要谨慎
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存优化是性能优化的重头戏,因此这部分也花了很多时间来梳理。老规矩,先上大纲: 一、基础知识 1.1 Androi...
    Stan_Z阅读 15,049评论 3 46
  • 两年前我做过了类似的启动优化分析《如何统计Android App启动时间》和《如何优化Androd App启动速度...
    申国骏阅读 12,101评论 0 17
  • 小酌鸡汤 学贵有疑,小疑则小进,大疑则大进。 本文来源《Android 性能优化 全家桶》 什么是内存泄漏?  内...
    科技猿人阅读 5,754评论 0 4
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,728评论 28 53
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 9,383评论 0 5