Android性能调优具体技巧 20+条(干货不止一点点)

转载请标明出处:
http://blog.csdn.net/sinat_15877283/article/details/50854682
本文出自: 【温利东的博客】

新项目1.0版本已经快接近尾声,,,然而让人头疼的问题出来了,旧项目需要维护、改进;
看看以前的就项目蒙圈了“卧槽,这是什么鬼!!!”,相信很多朋友都和我有同样的感觉。和新项目比起来 旧项目就是一坨“shi”,然而“shi”还得自己铲。
趁着这次机会,整理一下学到的性能优化技巧。


布局:

  • 移除Window不必要的Background(Activity:setWindows().setBackgroudDrawable(null),Fragment:setBackgroud(null))
  • 巧用< merge/>标签 优化布局层数
  • 使用ClipRect & QuickReject 较少过度绘制(自定义)
  • 多用wrap_content, match_parent

内存

  • 使用占内存少的对象:考虑使用ArrayMap/SparseArray(SparseBoolMap,SparseIntMap,SparseLongMap,LongSparseMap)代替HashMap等传统数据结构。
  • 避免使用枚举
  • 传输经过压缩 gzip的数据
  • png图片 使用 tinyPNG 进行有损压缩
  • 长字符串处理使用 StringBuffer 代替 String
  • 大Bitmap 等比缩放 或者选择 解码格式(有透明度:ARGB_4444,无透明度:RGB_565)。
  • 内存最好是重复利用
  • 使用 for-each
  • 使用乘法代替除法(如 a*0.5 替换 a/2)
  • 注意缓存容器中的对象泄漏:如 避免handler 内存泄漏:onDestroy方法中调用handler.removeCallbacksAndMessages(null);
  • 注意监听器的注销:如 广播 注销。
  • 关闭资源对象:对SQLiteOpenHelper,SQLiteDatabase,Cursor,文件,I/O操作等都应该记得显示关闭。
  • 避免频繁网络请求
  • 异常抛出,在合适的位置处理或者集中处理,不要搞的到处是catch,混乱且性能低,尽量不要在循环体中捕获异常,以提升性能。

其他

  • 给网络分级: 如在wifi下做下载视频类工作。
  • 在gradle使用shrinkResources去除无用资源( shrinkResources true )
  • 删除x86包下的so
  • 开启线程池
  • 按钮的感应范围不小于9mm否则不易点击(用padding 代替 外边距)

调优工具:

  • HierarchyViewer:查看布局
  • Monitor Memory查看Dalvik Heap的实时变化。
  • Allocation Tracker(内存分配跟踪工具)
  • Heap Tool:查看当前内存快照,便于对比分析哪些对象有可能是泄漏了的。
  • 图片压缩:https://tinypng.com/

希望我的分享能对你有帮助,也希望你能提出你的意见和想法,一起分享,共同成长。
转载请标明出处: http://blog.csdn.net/sinat_15877283/article/details/50854682


调试工具:

  • Hierarchy View:Hierarchy View 在Android SDK里自带,常用来查看界面的视图结构是否过于复杂,用于了解哪些视图过度绘制,又该如何进行改进。
  • Lint:Lint 是 ADT 自带的静态代码扫描工具,可以给 XML 布局文件和 项目代码中不合理的或存在风险的模块提出改善性建议。
  • Systrace:Systrace 在Android DDMS 里自带,可以用来跟踪 graphics 、view 和 window 的信息,发现一些深层次的问题。很麻烦,限制大,实际调试中我基本用不到。
  • Track:Track 在 Android DDMS里自带,是个很棒的用来跟踪构造视图的时候哪些方法费时,精确到每一个函数,无论是应用函数还是系统函数,我们可以很容易地看到掉帧的地方以及那一帧所有函数的调用情况,找出问题点进行优化。
  • OverDraw:通过在 Android 设备的设置 APP 的开发者选项里打开 “ 调试 GPU 过度绘制 ” ,来查看应用所有界面及分支界面下的过度绘制情况,方便进行优化。
  • GPU 呈现模式分析:通过在 Android 设备的设置 APP 的开发者选项里启动 “ GPU 呈现模式分析 ” ,可以得到最近 128 帧 每一帧渲染的时间,分析性能渲染的性能及性能瓶颈。
  • StrictMode:通过在 Android 设备的设置 APP 的开发者选项里启动 “ 严格模式 ” ,来查看应用哪些操作在主线程上执行时间过长。当一些操作违背了严格模式时屏幕的四周边界会闪烁红色,同时输出 StrictMode 的相关信息到 LOGCAT 日志中。
  • Animator duration scale:通过在 Android 设备的设置 APP 的开发者选项里打开 “ 窗口动画缩放 ” / “ 过渡动画缩放 ” / “ 动画程序时长缩放 ”,来加速或减慢动画的时间,以查看加速或减慢状态下的动画是否会有问题。
  • Show hardware layer updates:通过在 Android 设备的设置 APP 的开发者选项里启动 “ 显示硬件层更新 ”,当 Flash 硬件层在进行更新时会显示为绿色。使用这个工具可以让你查看在动画期间哪些不期望更新的布局有更新,方便你进行优化,以获得应用更好的性能。

参考:
http://hukai.me/android-training-performance-tips/
http://blog.csdn.net/sinat_15877283/article/details/50806272
http://hukai.me/android-training-managing_your_app_memory/
http://hukai.me/android-performance-battery/
http://blog.csdn.net/sinat_15877283/article/details/50776228
http://hukai.me/android-performance-patterns-season-2/
http://hukai.me/android-performance-patterns-season-3/
http://blog.csdn.net/sinat_15877283/article/details/50743402
http://hukai.me/android-performance-battery/
http://blog.csdn.net/sinat_15877283/article/details/50762297
http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=402380504&idx=1&sn=7013f0842867a21555adcf445c7c03ee#rd

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值