不少时候咱们须要考虑Android平台上的内存管理问题,Dalvik VM给每一个进程都分配了必定量的可用堆内存,当咱们处理一些耗费资源的操做时可能会产生OOM错误(OutOfMemoryError)这样的异常,Android123观察了下国内的相似Market客户端设计,基本上都没有采用很好的内存管理机制和缓存处理。数据库
若是细心的网友可能发现Android Market客户端载入时,每一个列表项的图标是异步刷新显示的,但当咱们快速的往下滚动到必定数量好比50个,再往回滚动时可能咱们看到了部分App的图标又从新开始加载,固然这一过程多是从SQLite数据库中缓存的,可是在内存中已经经过相似SoftReference的方式管理内存。缓存
在Java中内存管理,引用分为四大类,强引用HardReference、弱引用WeakReference、软引用SoftReference和虚引用PhantomReference。它们的区别也很明显,HardReference对象是即便虚拟机内存吃紧抛出OOM也不会致使这一引用的对象被回收,而WeakReference等更适合于一些数量很少,但体积稍微庞大的对象,在这四个引用中,它是最容易被垃圾回收的,而咱们对于显示相似Android Market中每一个应用的App Icon时能够考虑使用SoftReference来解决内存不至于快速回收,同时当内存短缺面临Java VM崩溃抛出OOM前时,软引用将会强制回收内存,最后的虚引用通常没有实际意义,仅仅观察GC的活动状态,对于测试比较实用同时必须和ReferenceQueue一块儿使用。网络
对于一组数据,咱们能够经过HashMap的方式来添加一组SoftReference对象来临时保留一些数据,同时对于须要反复经过网络获取的不常常改变的内容,能够经过本地的文件系统或数据库来存储缓存,但愿给国内作App Store这样的客户端一些改进建议。异步