内容简介:前几年,Google 发布了关于相关学习整理可以前往可能导致内存泄露的场景很多,例如静态变量、单例模式、属性动画、AsyncTask 以及 Handler 等等,在使用的时候记得处理释放。
前几年,Google 发布了关于 Android 性能优化典范 的系列专题,帮助开发者创建更快更优秀的 Android App。课程专题不仅仅介绍了 Android 系统中有关性能问题的底层工作原理,同时也介绍了如何通过 工具 来找出性能问题以及提升性能的建议。
相关学习整理可以前往 胡凯 大佬的博客阅读,感谢他的无私分享:
- Android 性能优化典范 - 第 1 季
- Android 性能优化典范 - 第 2 季
- Android 性能优化典范 - 第 3 季
- Android 性能优化典范 - 第 4 季
- Android 性能优化典范 - 第 5 季
- Android 性能优化典范 - 第 6 季
Android 的性能优化方法
布局优化
- 删除布局中无用的组件和层级,有选择地使用性能较低的 ViewGroup,如 RelativeLayout。
-
使用
<include>标签用于布局文件的重用,简洁高效。 -
使用
<merge>标签和<include>配合,可以减少布局中的层级。 -
使用
<viewstub>标签,它具有按需加载的功能,当需要的时候才会将 ViewStub 中的布局加载到内存,提高了程序的初始化性能。
绘制优化
-
View 的
onDraw方法中不要创建新的局部对象,因为onDraw会被频繁调用。 -
View 的
onDraw方法中不要做耗时的任务,要求每帧绘制时间控制在 16 ms 以内。
内存泄漏优化
可能导致内存泄露的场景很多,例如静态变量、单例模式、属性动画、AsyncTask 以及 Handler 等等,在使用的时候记得处理释放。
响应速度优化和 ANR 日志分析
- Android 规定:Activity 如果 5 秒内没有响应屏幕触摸事件或者键盘输入事件就会 ANR,而 BroadcastReceiver 如果 10 秒内没有执行完操作也会出现 ANR。
-
当一个进程发生了 ANR 之后,系统会在
/data/anr目录下创建一个文件traces.txt,通过分析这个文件就能定位ANR的原因。
ListView 和 Bitmap 优化
-
ListView 优化:采用 ViewHolder 并避免在
getView方法中执行耗时操作;根据列表的滑动状态来控制任务的执行频率;尝试开启硬件加速来使 ListView 的滑动更加流畅。 -
Bitmap 优化:主要是设置
BitmapFactory.Options的inSampleSize采样率属性来加载所需尺寸的图片,详情可参考 Bitmap 的加载和 Cache
线程优化
采用线程池,避免程序中存在大量的 Thread,详情可参考 Android 的线程和线程池
一些优化建议
- 避免创建过多的对象
- 不要过多使用枚举,枚举占用空间比整型大
-
常量尽量使用
static final来修饰 -
使用一些 Android 特有的数据结构,比如
SparseArray和Pair等,它们都具有更好的性能 - 适当使用软引用和弱引用
- 采用内存缓存和磁盘缓存
- 尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露
内存泄漏分析 MAT 工具
Eclipse Memory Analysis Tools (MAT) 是一个分析 Java 堆数据的专业工具,用它可以定位内存泄漏的原因。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 性能优化第一课:性能指标
- 【前端性能优化】vue性能优化
- Golang 性能测试 (2) 性能分析
- 【前端性能优化】02--vue性能优化
- Java性能 -- 性能调优标准
- Java性能 -- 性能调优策略
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Web Reputation Systems
Randy Farmer、Bryce Glass / Yahoo Press / 2010 / GBP 31.99
What do Amazon's product reviews, eBay's feedback score system, Slashdot's Karma System, and Xbox Live's Achievements have in common? They're all examples of successful reputation systems that enable ......一起来看看 《Building Web Reputation Systems》 这本书的介绍吧!