摘要
虽说Android硬件水平在不断的提高在App开发过程中,性能优化似乎是一个经常性的话题,本文将从内存的角度来分析如何对Android App的性能进行优化。
内存优化
内存优化,说直白点就是高效的使用内存、高效的回收内存及有效的避免内存泄漏。
高效的使用内存
为了更好的适用于Android手机(内存小,CPU资源紧张)这个应用场景,Google 封装了一些比较常用的数据结构(在android.util包下),如ArrayMap、ArraySet、SparseArray(SparseBooleanArray、SparseIntArray、SparseLongArray)等。
SparseArray
在Android中当HashMap<Key, Value>
中的Key
为Integer
类型时,可以采用SparseArray
类替换以提高效率(在数据量很大的时候还是HashMap
效率更高)。
SpareArray特点:
- 采用的两个数组来实现,一个int数组,一个Object数组
- 采用binary search算法来查找元素
与之相对应的,HashMap特点:
- 采用数组,数组里面的对象是链表的头结点
- 支持K、V为null的情况
- 支持K迭代、V迭代及KV迭代(内部实现了三种迭代器)
高效的回收内存
避免内泄漏
内存泄漏的原因
监测内存泄漏
使用LeakCanary监测内存泄漏;(LeakCanary的原理)
使用BlockCanary监测UI卡顿
使用SystemTrace分析卡顿
常见的内存泄漏情景
- 使用非静态内部类(或匿名内部类)
- 使用AsyncTask或Handler
- 使用Timer或TimerTask
- 使用单例模式
- 使用静态变量
- 使用广播未取消注册或回调
- 使用资源如Cursor、File等未关闭
- 使用WebView造成内存泄漏
- 属性动画造成内存泄漏