安卓开发 第十二篇 Android App 优化总结
2017-04-16 17:30
302 查看
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
使用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
相关文章推荐
- android app 开发过程中 对于性能优化的总结
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十三)关于ListView的优化总结
- 安卓航班Android开发经典教程大总结1----基础编程及源码推送
- android应用开发 网络编程与常见功能优化总结
- Android开发性能优化大总结
- 【Android】开发优化之—— 一般总结
- Android开发性能优化大总结
- 安卓航班Android开发经典教程大总结----序言
- Building android app first tutorial by VUE- 安卓开发教程
- Android开发性能优化大总结
- Unity开发安卓游戏(2):基于安卓游戏的优化方案总结!
- Android_app项目开发步骤总结
- Android开发性能优化大总结
- Android开发性能优化大总结
- Android 开发程序的优化总结
- android应用开发 网络编程与常见功能优化总结
- Android开发性能优化大总结(二)
- 安卓android程序源码487套+app应用开发教程+视频教学
- 基于Android Webview的Hybrid App开发的前端优化
- Android开发性能优化大总结