1.布局优化
1.Android UI渲染机制16ms间隔,刷新一帧,使用“开发者选项”中gpu渲染,查看过度绘制部分;减少红色区域的内容
2.优化布局层级,view树高度不宜超过10层,但是一般都不会超过10层;尽量使用relativelayout
3.避免过多嵌套无用布局,
4使用include标签,重用layout布局;
5.使用viewstub实现view 的延迟加载;
6使用Hierarchy Viewer检查布局,可以使用View server的开源项目,让普通手机也能使用Hierarchy Viewer工具检查;
2内存优化
内存基本概念:
1.Android中的内存通常就是说的手机的RAM,大致包括
寄存器:速度最快的存储场所,位于处理器内部,程序无法控制;
栈:存放基本数据类型和对象引用;
堆:存放new的对象和数组,由java虚拟机自动垃圾回收器管理;
静态存储区:固定的位置存放应用程序运行时一直存在的数据,java在内存中专门划分出静态存储区管理一些特殊的数据变量如静态的数据变量;
常量池:java虚拟机为每一个被装载的类型维护一个常量池,常量池是该类型所用到的常量的有序集合,包括直接常量(int string类型等)、和对其他类型、字段、方法的符号 引用;
bitmap优化
bitmap占用内存过多,是oom异常的最大威胁
1.使用适当分辨率和大小的图片;例如在listview列表中使用图片的缩略图
2.及时回收内存;调用bitmap.recycle()方法回收,3.0以后,bitmap放置在堆中,由gc管理,可以不用释放;
3.使用图片缓存:LruCache和DiskLruCache,内存缓存和磁盘缓存;
代码优化
1.常量static修饰;
2.使用静态方法,访问速度比普通方法提高15%
3.减少不必要成员变量,能定义局部变量,就不用成员变量,lint工具可以提示;
4.减少不必要的对象创建,使用基础类型更加节省资源;
5.尽量不适用枚举,少用迭代器;
6.对cursor,receiver,sensor,file等关注创建、回收与注册、解注册
7.避免使用ioc框架,尽量少用反射;
8.可以使用renderscript、opengl进行复杂的绘图操作;
9.使用surfaceview代替view进行大量、频繁的绘图操作;
10.尽量使用视图缓存,不是每次都inflate方法解析视图;
优化相关工具:
lint工具,根据提示建议优化代码;
Memory Monitor关注内存变化相关信息;
MAT工具分析内存状态;