Skip to content

Latest commit

 

History

History
94 lines (61 loc) · 2.32 KB

Android性能优化.md

File metadata and controls

94 lines (61 loc) · 2.32 KB

Android性能优化

可能出现性能问题的原因

  • 非静态内部类导致的内存泄漏

    例如:Handler内部类,四大组件的Context

  • 过渡绘制

  • 自定义View中TypedArray未关闭

  • IO操作之后没有关闭

  • 频繁的回调中创建实例

性能优化指标(如何量化)以及工具方法

指标

  • 1秒内刷新的帧数越接近60越好。
  • 启动时间
  • 占用内存
  • 功耗
  • APK体积

工具

  • 开发者选项中的GPU过渡绘制
    • 紫色 1X
    • 绿色 2X
    • 橘色 3X
    • 红色 4X
  • Android Studio中的静态代码检查工具
  • Android Monitor

原则

  • 要有足够多的测量,不能凭感觉
  • 要尽量使用低配置的设备进行测试
  • 不能过度优化

流畅度的优化

造成原因

  • 内存抖动 -> 导致频繁的GC
  • 过度绘制 -> 丢帧
  • UI线程做了耗时操作
  • 内存不足(系统原因)

解决

内存抖动

避免在循环中申请局部变量

过度绘制

  1. 在布局文件中使用标签,只用于根布局,并且根布局是FrameLayout的时候,解决相同布局嵌套产生的过度绘制

  2. 在布局中使用ViewStub,一个懒加载的ViewGroup,并且这个布局的inflate不能在子线程中执行,否则会返回null,而且只能实例化一次

  3. 使用进行占位

  4. 去掉widnow的默认背景,在自定义主题的时候,android:windowBackground设置为@null。每个Activity要有默认的背景(解决windowActivity同时有背景的问题)

启动时间

优化ActivityApplicationonCreate()中的流程,能异步就异步

内存占用

  1. 使用完IO操作立即关闭文件
  2. 合理的定义缓存大小(建议是应用所占内存的1/8)
  3. 尽量避免创建大对象和大量的对象
  4. 程序中用到的图片放在合适的drawable文件夹下

功耗(掉电、发热)

常见原因

频繁的网络访问、频繁的界面刷新

解决方法

对于网络访问,尽量使用缓存,有必要的话建立长连接

减少循环动画的使用,使用触发式动画

APK体积优化

  • 使用一套图片资源,建议使用720p的资源,放在xxdpi
  • 对图片进行压缩(tinypng.com)
  • 不使用alpha的png可以使用jpg来代替
  • so库可以放弃x86
  • 资源混淆
  • 插件化