【发布时间】:2013-08-17 19:30:25
【问题描述】:
我是所有内存管理主题的新手,所以有很多东西我不明白。
我正在尝试在我的应用中缓存图像,但我遇到了内存消耗问题:
所有的 Bitmap Chaching 代码几乎都是从这里复制粘贴的: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(Bytes per pixel)=3.125mb
关于这个主题的所有线程都没有说明为什么它占用的内存比它应该的多得多。有没有办法用合理的内存缓存一张图片?
编辑
我尝试使用下面@ArshadParwez 的回答中建议的 decodeFile 方法。使用这种方法,在 BitmapFactory.decodeStream 方法之后,内存只增加了 3.5mb - 问题解决了,有点,但我想直接从资源中缓存位图。
我注意到,在 decodeResource 方法期间,有 2 次内存“跳跃”——其中一次约为 3.5mb——这是合理的,另一次奇怪的是 14mb。那些 14mb 是用来做什么的?为什么会这样?
【问题讨论】:
-
缓存到文件系统而不是活动内存怎么样?
-
@PaulNikonowicz 即使解决了问题,也可以推测辅助内存是闪存或类似类型,频繁写入会缩短其寿命,而主内存则不然。
-
4 个字节用于 ARGB4444。你确定不是argb8888?
-
@DiegoCNascimento 二级内存并不一定意味着带有 Android 设备的闪存卡。
-
即使是8字节也应该是6.25mb。而且我不想避免缓存,这不是解决方案。必须有正确的方法。
标签: java android caching bitmap