我对内存管理这一主题还很陌生,有很多东西我不理解。
我试图在我的应用程序中缓存图像,但是我遇到了它的内存消耗问题:
所有Bitmap缓存代码基本上都是从这里复制粘贴的:http://developer.android.com/training/displaying-bitmaps/index.html
我调试了这段代码,并在Eclipse的DDMS视图中检查了堆大小,在这些代码行之后堆大小增加了约15MB:
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
在“decodeSampledBitmapFromResource”方法中。这张图片是1024x800的,大小为75kb的jpg文件。根据我在互联网上看到的信息,这张图片应该占用大约1024*800*4(每个像素字节数)=3.125mb的内存。
所有关于这个问题的线程都没有说清楚为什么它占用的内存比它应该的多。有没有一种方法可以使用合理数量的内存缓存一张图片?
编辑:
我尝试了在@ArshadParwez的答案下建议的decodeFile方法。使用这种方法,在BitmapFactory.decodeStream方法之后,内存只增加了3.5mb——问题得到了解决,但我想直接从资源中缓存位图。
我注意到在decodeResource方法期间有两个内存“跳跃”——一个大约为3.5mb——这是合理的,另一个奇怪的是14mb。这14mb是用来做什么的?为什么会发生这种情况?