关于性能优化的笔记

笔记内容来源于《Android开发艺术探索》—非常好的一本书,力荐!

布局优化:

1、减少布局的嵌套
  使用<include>标签:将一个指定的布局文件加载到当前布局
  使用<merge>标签:一般和<include>标签一起减少布局的层级,这个标签可以去掉多余的同类型布局,
  比如include的linearlayout和根linearlayout的布局参数相同,
  就可以使用这个标签来去掉对于的那一层linearlayout
  使用ViewStub,在使用的时候再加载布局
2、尽量使用性能弱的ViewGroup,

比如RelativeLayout功能复杂,它的布局就要比使用linearlayout花费CPU较多的时间,所以如果可以使用较弱的ViewGroup就尽量使用较弱的。

3、如果使用较弱的布局需要嵌套,那么还是建议使用RelativeLayout,因为嵌套同样会降低程序性能

绘制优化:

1、onDraw方法中不要创建新的局部对象

这是因为onDraw方法会被频繁调用,这样就会在一瞬间产生大量临时对象,不但占用内存多还会导致频繁gc,导致程序效率降低

2、onDraw方法中不做耗时任务,也不能执行成千上万次的循环操作,这会导致View绘制不流畅。

谷歌官方建议,每帧的绘制时间不超过16ms,所以我们应当尽量降低onDraw方法的复杂度

listview/gridview的优化:

1、避免在getview中执行耗时操作
2、根据滑动状态来控制任务执行频率,比如在用户频繁的无意义的滑动的时候不进行网络访问,当滑动停止的时候再发起网络请求
3、可以尝试开启硬件加速

Bitmap的优化:

1、使用BitmapFactory.Options来根据需要对图片进行采样,采样过程中用到了一个inSampleSize参数,

当inSampleSize<1的时候,作用相当于1,即无缩放效果
当inSampleSize=1的时候,采样后的图片大小为图片的原始大小
当inSampleSize>1的时候,比如为2,采样后的图片大小为原图的1/2,而像素数为原图的1/4,它所占的内存也为原图的1/4

例:一个1024*1024像素的图片,如果使用ARGB8888格式存储,它所占内存是1024*1024*4=4MB
如果inSampleSize=2,那么采样后的大小是:512*512*4=1MB

官方建议这个值应该总是2的指数,比如:1,2,4,8,16

2、使用ImageLoader等带有缓存功能的框架,方便开发。

线程优化:

尽量采用线程池,避免程序中存在大量Thread
 线程池的优点:
 1、重用内部线程,避免线程创建和销毁带来的性能开销
 2、可以有效的控制线程池的最大并发数,避免大量的线程因为互相抢占系统资源从而导致阻塞         

其它优化:

1、避免过多的创建对象
2、不要过多的使用枚举,枚举占用的 内存空间要比整形大
3、常量使用static final来修饰
4、使用android特有的数据结构,比如SparseArray和Pair,它们具有更好的性能
5、适当使用软引用和弱引用
  强引用:直接对象引用
  软引用:当一个对象只有软引用存在的时候,系统不足时此对象会被gc回收
  弱引用:当一个对象只有弱引用存在时,此对象会随时被gc回收
6、采用内存缓存和磁盘缓存
7、尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏。

你可能感兴趣的:(性能优化)