绘制优化,响应速度优化,线程优化

绘制优化

绘制优化指的是避免在View的onDraw方法中进行大量的操作。主要有两个方面:

首先,避免在onDraw方法中创建新的局部的对象,这是因为onDraw方法可能会频繁的调用,有可能在一瞬间产生大量的临时对象,这不仅会占用过多的内存,还会导致系统频繁的进行GC,影响程序的效率。

其次,不要在onDraw方法中进行耗时的操作,例如,不要有大的循环,因为耗时的操作,像是大量的循环,十分抢占CPU的时间片,导致绘制过程不流畅。

谷歌官方数据,View的绘制帧率保证60fps是最好的,也就是每一帧的绘制时间不应该高于16ms(1000ms/60=16ms)。

响应速度优化

响应速度优化的核心思想就是避免在主线程中进行耗时的操作,如果有耗时操作将耗时的操作放在子线程中执行。

响应速度更多的体现在Activity的启动速度上,如果我们在主线程中执行了过多的操作,会导致Activity启动的时候出现黑屏现象,甚至出现ANR。

Android规定,如果Activity在5s内无法响应触摸事件或者输入事件,就会出现ANR异常;BroadCastaReceiver如果在10s内无法执行完相应的操作,就会出现ANR异常。

当一个进程发生ANR以后系统会在/data/anr的目录下创建一个文件traces.txt,通过分析该文件就能定位出ANR的原因。

线程优化

线程优化的思想就是采用线程池,线程池可以重用内部的线程。采用线程池可以避免频繁的创建和销毁线程所带来的开销,同时可以控制线程的数量,避免过多的线程抢占资源引起的阻塞。因此在实际的开发中我们要尽量的采用线程池,而不是每次都创建一个Thread。关于线程池的使用,建议阅读:ThreadPoolExecutor

一些性能优化的建议

  • 避免创建过多的对象
  • 不要过多的使用枚举类型,因为枚举类型占用的内存比整型要大(枚举是用来构建常量数据结构的模版)
  • 常量请使用static final来修饰
  • 使用Android特有的一些数据结构,比如SparseArray和Pair等,他们都具有更好的性能
  • 适当的使用软饮用和弱引用
  • 恰当的使用磁盘缓存和内存缓存
  • 尽量使用静态内部类,这样可以避免潜在的由于内部类导致的内存泄漏

ListView优化

  • 采用ViewHolder并避免在getView中执行耗时的操作;
  • 在滑动的时候停止异步加载图片,等到停止滑动的时候加载图片;
  • 使用硬件加速;

摘自:《Android开发艺术探索》

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器