Android 性能优化

栏目: IOS · Android · 发布时间: 5年前

内容简介:前几年,Google 发布了关于相关学习整理可以前往可能导致内存泄露的场景很多,例如静态变量、单例模式、属性动画、AsyncTask 以及 Handler 等等,在使用的时候记得处理释放。

前几年,Google 发布了关于 Android 性能优化典范 的系列专题,帮助开发者创建更快更优秀的 Android App。课程专题不仅仅介绍了 Android 系统中有关性能问题的底层工作原理,同时也介绍了如何通过 工具 来找出性能问题以及提升性能的建议。

相关学习整理可以前往 胡凯 大佬的博客阅读,感谢他的无私分享:

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.OptionsinSampleSize 采样率属性来加载所需尺寸的图片,详情可参考 Bitmap 的加载和 Cache

线程优化

采用线程池,避免程序中存在大量的 Thread,详情可参考 Android 的线程和线程池

一些优化建议

  • 避免创建过多的对象
  • 不要过多使用枚举,枚举占用空间比整型大
  • 常量尽量使用 static final 来修饰
  • 使用一些 Android 特有的数据结构,比如 SparseArrayPair 等,它们都具有更好的性能
  • 适当使用软引用和弱引用
  • 采用内存缓存和磁盘缓存
  • 尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露

内存泄漏分析 MAT 工具

Eclipse Memory Analysis Tools (MAT) 是一个分析 Java 堆数据的专业工具,用它可以定位内存泄漏的原因。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MySQL入门很简单

MySQL入门很简单

黄缙华 / 清华大学出版社 / 2011-1 / 59.50元

《MySQL入门很简单》从初学者的角度出发,由浅入深,循序渐进地介绍了mysql数据库应用与开发的相关知识。书中提供了大量操作mysql数据库的示例,还提供了大量实例和上机实践内容,供读者演练。《MySQL入门很简单》附带1张dvd光盘,内容为与《MySQL入门很简单》内容完全配套的多媒体教学视频和《MySQL入门很简单》涉及的源代码。 《MySQL入门很简单》共分5篇。第1篇介绍数据库的基......一起来看看 《MySQL入门很简单》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试