您的位置:首页 > 移动开发 > Android开发

Android高级学习之性能优化

2017-03-08 10:48 211 查看

布局优化

避免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文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: