安卓开发 第十二篇 Android App 优化总结

1.渲染优化

  • 使用Hierarchy Viewer 确保view在16ms完成渲染
  • 开发者选项中打开Overdraw,尽量减少红色区域,增加蓝色区域
  • 开发者选项打开Profile GPU Rendering,确保现状图大部分在绿色横线下
  • 尽量少用透明度,带透明度的view会至少渲染两次

2.内存优化

工具:Memory Monitor,Allocation Tracker,Heap Tool
  • 避免频繁GC
    避免在for循环里面分配对象占用内存,需要尝试把对象的创建移到循环体之外,自定义View中的onDraw方法也需要引起注意,每次屏幕发生绘制以及动画执行过程中,onDraw方法都会被调用到,避免在onDraw方法里面执行复杂的操作,避免创建对象。对于那些无法避免需要创建对象的情况,我们可以考虑对象池模型,通过对象池来解决频繁创建与销毁的问题,但是这里需要注意结束使用之后,需要手动释放对象池中的对象。
  • 避免内存泄露
    (1). 注意加载大图时可能导致的OOM
    (2). 可以使用第三方库 LeakCandary检查内存泄露
  • 做好应用缓存

3.电量优化

  • 尽量减少唤醒屏幕的次数与持续的时间,使用WakeLock来处理唤醒的问题,能够正确执行唤醒操作并根据设定及时关闭操作进入睡眠状态。
  • 某些非必须马上执行的操作,例如上传歌曲,图片处理等,可以使用JobScheduler API进行定时任务,等到设备处于充电状态、或者电量充足或者是连接到WiFi的时候来处理。
  • 把零散的网络请求打包进行一次操作。

4.代码优化

  • 使用Lint检查代码
  • 不在主线程做耗时操作,以免发生ANR
  • 开发调试时打开 Strict Mode
  • 自定义View优化
    (1). Useless calls to onDraw():我们知道调用View.invalidate()会触发View的重绘,有两个原则需要遵守,第1个是仅仅在View的内容发生改变的时候才去触发invalidate方法,第2个是尽量使用ClipRect等方法来提高绘制的性能。
    (2). Useless pixels:减少绘制时不必要的绘制元素,对于那些不可见的元素,我们需要尽量避免重绘。
    (3). Wasted CPU cycles:对于不在屏幕上的元素,可以使用Canvas.quickReject把他们给剔除,避免浪费CPU资源。另外尽量使用GPU来进行UI的渲染,这样能够极大的提高程序的整体表现性能。

  • 使用SparseArray中的数据结构,比如ArrayMap,代替HashMap

  • 使用普通static常量代替Enum
  • onTrimMemory()中释放当前不需要的资源
  • 避免异步回调
  • 尽量避免使用static对象
  • 避免把View添加到没有清除机制的容器里面
  • 避免调用requestLayout()方法
  • 尽量使用IntentService代替Service

5.App启动优化

  • Application 的oncreate()中不要做耗时操作
  • 某些库的初始化可以放到具体调用之前
  • 添加启动闪屏页

6.apk体积优化

  • 图片压缩,格式处理
  • 如果只使用第三方库的少部分功能,采用更轻量的库
  • 启用Proguard混淆来瘦身
  • 开启shrinkResources,移除无用资源
  • 使用Vertor Drawable替代传统的PNG/JPEG图片

更多类容查看:

胡凯性能优化系列:http://www.csdn.net/article/2015-01-20/2823621-android-performance-patterns
谷歌官方性能优化系列视频:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

你可能感兴趣的:(安卓开发)