布局优化
1.尽量减少布局文件的层级
2.有选择的使用性能较低的布局(LinearLayout,FrameLayout>RelativeLayout)
3.采用<include>,<merge>标签和ViewStub(按需加载,需要时才会把ViewStub的布局加载到内存)
绘制优化
onDraw方法中避免创建大量的局部对象,避免做耗时任务
内存优化
内存抖动:短时间内有大量对象创建销毁,它伴随着频繁的GC
响应速度优化和ANR日志分析
响应速度优化和核心思想就是避免在主线程去做耗时操作
ANR:当一个进程发生ANR时,系统会在/data/anr的目录下创建一个traces.txt的文件,通过分析该文件就能定位出ANR的原因
ListView优化和Bitmap优化
ListView优化:
1.采用ViewHolder避免在getView中执行耗时操作
2.通过列表的滑动状态来控制任务的执行频率,比如快速滑动时不适合开启大量异步任务
3.可以尝试开启硬件加速使得ListView的滑动更加流畅
Bitmap优化:通过BitmapFactory.options来根据需要对图片进行采样
线程优化
尽量采用线程池
一些性能优化的小建议
1.尽量使用static final 优化成员变量。
2.使用增强型for循环语法。
3.在没有特殊原因的情况下,尽量使用基本数据类型来代替封装数据类型,int
比Integer要更加有效,其它数据类型也是一样。
4.在合适的时候适当采用软引用和弱引用。
5.采用内存缓存和磁盘缓存。
6.尽量采用静态内部类,可避免潜在由于内部类导致的内存泄漏。