Android 中内存泄露之我的不解(1)

据说android 分给图片的内存只有8MB?

然后我就测试下一次加载多少MB 的图片会出错。网上找了几张1MB+的图片。代码中构建了gallery 用来加载这些图片,但是放进Gallery中的drawable 的内存已经30MB+了。运行程序依旧不会崩溃。。在模拟器上好像还很流程?

那么问题来了? 是android对drawable做了处理?这种图在android中占用内存很小?还是根本不是8MB?第二种情况有点不可能。那么开始动手测试下应用到底占用了多少内存。。。

这说明我们已经分配了2.4MB。进程中还有2.6mb为分配。。下面我再加入30张1MB的图片。

结果程序还是没有崩溃。。。内存情况变化为:
  3.129 MB 2.385 MB 762.133 KB 76.21% 46,493   。。。蛋疼了。。还有763KB。。如果没有自由空间了是不是该崩溃了?

加入了100MB以上的图片  堆里的内存使用情况 1 3.129 MB 2.388 MB 759.070 KB 76.31% 46,533   自由空间一直徘徊在 760KB左右?可是我点击图片操作的时候发现data object 中的data 数据是有变化的,停止操作的时候数据回回滚到原始数据这说明(1)说明图片加载的时候只是一张一张加载的,只有点及图片的时候,图片才会去占用内存,停止操作之后GC内存被回收。。()

有另外一种可能drawable 是占用很少的内存空间的。。。。。  查资料得知Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),。。。但是如果放到资源文件下面的应该就是占用内存的。。。

 其实1,和2 是很容易验证找个10MB图片一次性加载进去。试试就知道了。可是我没找到10MB的图片。等明天搜到了图片我会验证的。。。

,没找到10MB 的图片,但是问题不能不搞啊,我们知道BItMap图片是很占用内存的,一般的图片出错都是它造成的,所以我试了下使用Bitmap数组来构建gallery,依然没有造成内存溢出。所以可以证明(1)说明图片加载的时候只是一张一张加载的,只有点及图片的时候,图片才会去占用内存,停止操作之后GC内存被回收。。()

 

所以 图片造成溢出 是因为:把图片放到内存之后,图片一致没有recycle 。当过多的图片没有recycle 之后图片超过8mb就崩溃了。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章