1.布局优化
布局优化的思想很简单,就是尽量减少布局文件的层级。
优先使用LinearLayout 而不是Relativelayout,如果需要嵌套的方式实现,那还是建议使用RelativeLayout
布局优化的另一种手段是采用<include>标签,<merge>标签和ViewStub
include标签主要用于布局重用 . merge标签一般和include配合使用,他可以降低布局的层级,而ViewStub则提供了按需加载的功能,当需要的时候才会加载
15.1.2绘制优化
绘制优化是指View的onDraw方法要避免执行大量的操作,onDraw不要穿件新的布局对象,因为onDraw方法可能会被频繁调用,这样会在一瞬间产生大量的临时对象,这不仅会占用了过多的内存而写会导致系统更加频繁的gc,降低程序的执行效率,另一方面ondraw不要做耗时的任务,view的绘制频率保持60fps为最佳,这就要求每帧的绘制时间不能超过16ms(16ms = 1000 / 60)
15.1.3 内存泄漏优化
1.静态变量导致的内存泄漏
2.单例模式导致的内存泄漏
3.属性动画没有停止导致的内存泄漏
15.1.4 相应速度优化和ANR日志分析
当前一个进程发生了ANR,系统会在/data/anr目录下创建一个文件trace.txt 通过分析这个文件就能定位出ANR的原因
adb pull /data/anr/trace.txt . .代表当前目录
15.1.5ListView和Bitmap优化
实现使用ViewHolder并避免在getView中执行耗时操作
bitmap的优化主要通过bitmapFactory.options来根据需要对图片进行采样,过程中主要用到BitmapFactory.options的inSampleSize参数
15.1.6 线程优化
采用线程池
15.1.7 一些性能优化建议
1.避免过多创建对象
2.不要过多使用枚举,枚举占用空间比整形大
3.常量请使用static final 来修饰
4.使用一些android特有的数据结构,比如SparseArray和Pair等,他们有更好的性能
5.适当使用软引用和弱引用
6.采用内存缓存和硬盘缓存
7.尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏
15.2
内存泄漏分析之MAT
15.3提高程序的可维护性