Android OOM(Out of Memory) 一点认识


今年做公司项目的时候,自己做与File有关的那部分。

需求如下:

如果是图片就完全显示出来,如果不是图片就让显示默认的图标。还有两种不同的显示方式,一种是tile view(瓦片样式,就是一行可以有好几个文件,类似GridView,但是有的Item可以跨行),另一种就是list View.

众所周知,每一个Android APP 分配16M的内存,图片的内存被分配给8M,这些内存真是少的有点可怜,内存的及时回收显得极为重要,内存的重复利用同样如此。

我自己写了一个ImageDownloader类来异步下载图片,并且把图片和URL对应保存到内存中,当出现相同的url时,不用再次从网络下载,直接从内存里面取,节省了时间,也节省了网络资源。

刚开始的时候只要屏幕上有几张图片,不同视图(tile view 和 list view)之际切换就会有出现如下error:“ bitmap size exceeds vm budget”,相信大多数人都遇到过这样的问题。

一直不知道怎么解决?

后来才发现了问题所在:我的两个Adapter(TileViewAdapter 和ListViewAdapter)中各自保存了一个ImageDownloader,这样就会使用的内存加倍,所有我的解决方法就是把ImageDownloader变量位置向上提一级,放到他们共同的Activity中,问题就解决了。

如果发现任何问题,请您指正。

相关内容