布局优化
- 根布局尽量使用RelativeLayout
- 因为正常的frameLayout和LinearLayout无法实现效果,通过嵌套就增加了布局层级,会降低性能的
- 使用< include>标签
- 使用< merge>标签
- 一般配合include使用
- 使用 ViewStub
- 根布局尽量使用RelativeLayout
绘制优化
- 尽量不要在View的onDraw中执行大量的操作!
- 不要在onDraw中创建局部对象,因为onDraw会被频繁调用,这个会产生大量临时对象..占用内存
- 不要在onDraw中做耗时操作
内存泄漏优化
静态变量导致的内存泄漏
- 不要在activity中引用静态的Context对象– sContext = this
- 不要使用静态的View去引用activity对象– sView =new View(this)
单列模式导致的内存泄漏
这个可以联想到EventBus.getDefault().register(this);和EventBus.getDefault().unregister(this); 如果定义类似的单列(引用了activity = this),没有在onDestroy中注销的话 也会引起内存泄漏的!
属性动画导致的内存泄漏
如果属性动画中执行了infinite无限执行的模式,就需要在onDestroy中执行cancel的操作!否则activity就无法释放…
响应速度优化和ANR日志分析
- activity如果5秒内无法响应屏幕触摸事件或者键盘输入事件就会ANR
- BroadcastReceiver10秒内还未执行也会出现ANR
- 如果出现ANR,系统会在/data/anr中创建一个traces.txt文件,通过 adb pull /data/anr/traces.txt . 注意后面的 点 ,导出会进行分析
ListView 和 Bitmap优化
- listview
1.使用ViewHolder
2.在滑动的过程中不执行加载操作,停止滑动在执行
3.开启硬件加速 - bitmap
通过BitmapFactory.Options来进行图片采样,用到BitmapFactory.Options中的inSampleSize参数进行压缩
- listview
线程优化
注意就是合理的使用线程池,来避免启动过多的Thread
- 其他优化
1.避免过多的创建对象
2.不要过多的使用枚举
3.常量用staticfinal修饰
4.是当使用软引用和弱引用
5.采用内存缓存LruCache 和 磁盘缓存DiskLruCache
5.尽量采用静态内部类,可以比喵潜在的由于内部类二导致的内幕才能泄漏
观看 android艺术开发与探索总结