Work flow
- 分析App内存使用,解决内存泄漏
- 分析App哪些地方导致使用了大量内存
- 使用Lints等代码审核工具完善代码
常见优化目标
过度绘制
内存抖动
使用SparseArray
利用Android Framework里面优化过的容器类,例如SparseArray, SparseBooleanArray, 与 LongSparseArray。 通常的HashMap的实现方式更加消耗内存,因为它需要一个额外的实例对象来记录Mapping操作。另外,SparseArray更加高效在于他们避免了对key与value的autobox自动装箱,并且避免了装箱后的解箱。
不使用枚举,Float,Double
Paracelable比Serializable更快,因为知道序列化的顺序,不需要使用反射
Bitmap使用优化
当我们读取一个Bitmap图片的时候,有一点一定要注意,就是千万不要去加载不需要的分辨率。在一个很小的ImageView上显示一张高分辨率的图片不会带来任何视觉上的好处,但却会占用我们相当多宝贵的内存。需要仅记的一点是,将一张图片解析成一个Bitmap对象时所占用的内存并不是这个图片在硬盘中的大小,可能一张图片只有100k你觉得它并不大,但是读取到内存当中是按照像素点来算的,比如这张图片是15001000像素,使用的ARGB_8888颜色类型,那么每个像素点就会占用4个字节,总内存就是15001000*4字节,也就是5.7M,这个数据看起来就比较恐怖了。
网络优化
电量优化
常识
GC时会暂停所有线程的执行,包括主线程
移动网络情况下执行网络请求比Wifi更耗电
在面向对象的设计当中应该使用getter/setter,但是在类的内部你应该直接访问变量。
https://cutler.github.io/android-BY-A01/
http://androidperformance.com/2015/07/20/Android-Performance-Memory-Google.html