关于性能优化的感悟

布局优化:

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

例:一个10241024像素的图片,如果使用ARGB8888格式存储,它所占内存是102410244=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、尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值