Android 性能优化——内存优化

本文链接:https://rainmonth.github.io/posts/A180413.html

摘要

虽说Android硬件水平在不断的提高在App开发过程中,性能优化似乎是一个经常性的话题,本文将从内存的角度来分析如何对Android App的性能进行优化。

内存优化

内存优化,说直白点就是高效的使用内存、高效的回收内存及有效的避免内存泄漏。

高效的使用内存

为了更好的适用于Android手机(内存小,CPU资源紧张)这个应用场景,Google 封装了一些比较常用的数据结构(在android.util包下),如ArrayMap、ArraySet、SparseArray(SparseBooleanArray、SparseIntArray、SparseLongArray)等。

SparseArray

在Android中当HashMap<Key, Value>中的KeyInteger类型时,可以采用SparseArray类替换以提高效率(在数据量很大的时候还是HashMap效率更高)。

SpareArray特点:

  • 采用的两个数组来实现,一个int数组,一个Object数组
  • 采用binary search算法来查找元素

与之相对应的,HashMap特点:

  • 采用数组,数组里面的对象是链表的头结点
  • 支持K、V为null的情况
  • 支持K迭代、V迭代及KV迭代(内部实现了三种迭代器)

高效的回收内存

避免内泄漏

参考文章Android内存优化——常见内存泄露及优化方案

内存泄漏的原因

监测内存泄漏

常见的内存泄漏情景

  1. 使用非静态内部类(或匿名内部类)
  2. 使用AsyncTask或Handler
  3. 使用Timer或TimerTask
  4. 使用单例模式
  5. 使用静态变量
  6. 使用广播未取消注册或回调
  7. 使用资源如Cursor、File等未关闭
  8. 使用WebView造成内存泄漏
  9. 属性动画造成内存泄漏

如何避免

总结

参考文章

  1. Android 性能优化:内存优化(实践篇)