据说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就崩溃了。。