Android性能优化大纲

Android性能优化大纲

Android性能优化是开发者必须掌握的知识,因为已经有很多文章写Android性能优化的方方面面,因此,本文只做纲领性的阐述,指出Android哪些方面可以优化,限于笔者经验有限,如有不足请留言指出。

一. Android性能优化的目标

说一千,道一万,Android性能优化无非跟下面4个方面有关,而前4个因素或多或少和电量优化联系起来。

  • 提升响应速度
  • 提升UI运行(渲染)速度
  • 减少内存占用
  • 使用更少的网络流量
  • 消耗更少的电量

二. 提升响应速度

对于App开发者来说,系统层面的事我们很难插手,因此只能从APP的编写入手提升性能。

Android系统中规定了,Activity在5S之内没有响应,就会ANR,而在实际工程中,5s已经是一个很长的时间了,以下是相关研究机构调查得出的响应时间标准。正常的响应时间应当在0~2000ms以内。

image

从大多数意义上来说,响应速度慢就是做了耗时操作,因此解决方法有3个:

  • 其一是给出一个“伪” 响应,做一些耗时操作后,立即给出一个响应,比如一个转动的圆圈;或者是假装该操作已经完成,其实在后台慢慢干。这种方法比较多,仁者见仁,智者见智了。

  • 其二,在异步线程中做耗时操作(这个在Android中基本上是必须的)。

  • 其三,通过好的数据结构、算法将耗时操作简化。

常见的有可能发生“ANR”操作有哪些呢?

  • 网络访问

  • 大量数据读写

  • 数据库操作

  • 硬件操作(比如camera)

  • 加载大图片

  • 调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁,导致主线程等待超时,总之,多线程之间的操作要小心。

二、提升UI渲染速度

人眼对于屏幕的渲染速度是有要求的,Android中把达到这种流畅的帧率规定为60fps。这个速度换算一下约等于 16.67ms/每帧,意味着,绘制一帧图像最多耗费 16ms,如果超过这个数,则会掉帧,从而用户感到程序不流畅。

那么,哪些原因会导致UI不流畅呢?

  • 人为在UI线程中做轻微耗时操作(没有ANR),导致UI线程卡顿;

  • 布局Layout过于复杂,无法在16ms内完成渲染;

  • 同一时间动画执行的次数过多,导致CPU或GPU负载过重;

  • View反复绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重;

  • View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染;

  • 内存频繁触发GC过多(同一帧中频繁创建内存,GC会暂停其他线程),导致暂时阻塞渲染操作;

开发者可以做的从两方面入手,其一还是不要做耗时操作,其二是做布局优化,布局优化从以下几点着手:

  • 减少布局的嵌套层数,通过Android Studio的layot Inspector工具随便检查任意一个界面,可以发现Android 默认在你的布局之外包了好几层。因此,不要轻易在布局中嵌套很多层次。布局嵌套层数过多,在某些机型上甚至会造成StackOverflowError。

  • 合理使用merge

  • 合理使用ViewStub

  • 尽量用自定义Drawble代替图片做背景,比如一些纯色、圆角效果就不要用图片了。

  • 去掉不必要的背景色定义。

  • ListView的优化,主要有View的复用和局部更新技巧。

  • 对于自定义View,不要在它的onDraw()方法中做耗时操作。

  • 使用Android SDK自带的工具hierarchyviewer检查UI渲染性能,它位于SDK目录的这个路径/tools/hierarchyviewer.bat 。通过它可以检测到当前界面中哪些性能较低。

  • 还可以通过开发者选项中的GPU过度绘制工具来进行分析。在设置->开发者选项->调试GPU过度绘制,开启后在我们想要调试的应用界面中可以看到各种颜色的区域,具体含义如下:

      颜色| 含义
      ---|---
      无色| WebView等的渲染区域
      蓝色| 1x过度绘制
      绿色| 2x过度绘制
      淡红色|    3x过度绘制
      红色| 4x(+)过度绘制
    

对于UI布局优化,可以参看这一篇博客 Android UI性能调优

三、 减少内存占用

这个方面,概括来说只有两点:==1. 减少内存的分配 2. 防止内存泄漏==。

一些常见的优化技巧有:

  • 如可能,类的成员变量,尤其是静态成员变量,尽量转化为局部变量。
  • 选用更好的数据结构,比如使用SparseArray代替HashMap。
  • 需要才创建(分配)策略。
  • 合理利用Java的软引用、弱引用。
  • 在Android组件的OnLowMemory和OnTrimMemory方法中释放无用的内存
  • 防止内存泄漏,比如隐蔽的handler、AsyncTask和不当的context持有导致的内存泄漏,以及屏幕旋转导致的内存泄漏。
  • 对于图像的内存管理,比如inJustDecodeBounds属性的使用,使用图片缓存池等技巧。 此外,可以使用一些开源框架来进行图片管理,比如Fresco。

四、 减少网络访问

对于很多Android用户来说,流量的消耗是他们颇为在意的一个指标。减少流量消耗的方向有两个:1.减少单次网络访问传递的数据。 2.减少网络访问的次数。

更多详细的的网络优化技巧,请看这一篇 Android 网络优化技巧

五、耗电量优化

首先问一个问题,手机哪些操作会显著消耗电量?
根据相关研究,手机电量主要被消耗在:屏幕、处理器、移动蜂窝网络、WIFI

因此,减少使用上述元器件的操作就可以使APP更省电。

基本上,对电量优化的建议是:

  • 没事不要唤醒手机

  • 尽量不要使用后台Service,当一个安静的美男子

  • 把网络请求合并、或者说是在集中性的时段访问网络。

  • 把一些超级耗时的数据处理逻辑,转移到后台开发那去(少用点CPU)。

  • 少搞一些花哨华而不实的动画效果(别喷我)。

以上 就是鄙人对于Android优化了一点自我总结,限于有限的经验,所说的不一定是对的,如有错漏请不吝指出,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容