您的位置:首页 > 其它

关于性能优化的笔记

2016-06-30 23:10 218 查看
笔记内容来源于《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、尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  性能优化