您的位置:首页 > 移动开发

安卓开发 第十二篇 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息