Android高级学习之性能优化

布局优化

避免Overdraw

overdraw,过度绘制会浪费较多的Cpu和Gpu资源。Android系统在在开发者选项中提供了“Enable GPU Overdraw”工具,可以通过界面上的颜色来判断Overdraw的次数,不过由于项目只是在虚拟机上运行,所以项目中没有使用

布局层次优化

因为在Android系统中对View进行测量、布局,绘制时是通过对View的数量来进行遍历的,所以过多的View导致view的高度过高,就会影响对View进行测量、布局,绘制。所以在布局复杂的情况下尽量使用RelativeLayout,不过,由于RelativeLayout至少要绘制两次(对子View分别进行了竖直和水平方向的两次测量),而LinearLayout在不使用layouy_weight属性的情况下只测量一次,因而在其它布局嵌套比较少的时候还是推荐使用LinearLayout

使用include标签重用Layout

有一点需要注意的是:如果需要在include标签中覆盖类似原布局中的android:layout_XXX,就必须在include标签中同时指定android:layout_width和android:layout_height属性(原因可以参照Android控件架构)

使用ViewStub实现View的延迟加载

ViewStub是一个轻量级组件,大小为0.例:
首先创建一个布局,在初始化时不需要显示,只有某些情况下才显示
android:layout=“@layout/useless”,
接下来有两种方式来重新显示:通过调用setVisibity()方法来调用或inflate()来调用,唯一的区别是inflate()方法可以再次通过View.findViewById()方法来找到对应的控件。需要注意的是,不管是哪种方式使布局显示了,ViewStub也就消失了。相比于View.Gone ,ViewStub在布局中更具优势

或者是在onCreate()中使用addView

内存优化

Android系统使用的沙箱机制,每个应用使用的内存是有效的,内存低会触发LMK。涉及OOM问题(细看),内存泄露,对象引用问题(细看java回收机制)
优化例子:

Bitmap优化

使用适当分辨率和大小的图片,使用图片缓存(内存缓存和硬盘缓存)

代码优化

对常量使用static修饰符(static的作用)
使用静态方法(比普通方法提高15%左右的访问速度)
减少不必要的成员变量
减少不必要的对象,使用基础类会比使用对象更加节省资源
尽量不要使用枚举和迭代器
对Cursor、Receiver、Sensor、File等对象,注意回收
避免使用ioc框架,ioc使用注解、反射来进行实现,大量反射会带来性能的下降
使用RenderScript、OpenGL来进行复杂的绘图操作
使用SurfaceView来代替View进行大量、频繁的绘图操作
尽量使用视图缓存,而不是每次使用inflate()方法来解析视图

使用MAT工具来进行优化

生成HPROF文件和分析HPROF文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值