我需要在我的应用程序中显示许多图像。这些是 jpg 和 png,我将它们加载到 ImageView 中,如下所示:
tile.setImageResource(R.drawable.tile_highlight);
我目前遇到内存不足问题(java.lang.OutOfMemoryError: bitmap size exceeds VM budget
)
我搜索并找到了一些其他帖子,他们都建议您应该手动回收 ImageView 的位图,如下所示:((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();
这将从内存中转储它。
但就我而言,我没有使用setBitmap()
将图像加载到 ImageView 对象上,当我尝试运行上面的代码时,它返回NullPointerException
,更准确地说,该方法getBitmap()
返回null,没有位图?!?!
我是否需要返回代码并更改加载 ImageView 中所有图像的方式,然后尝试使用recycle()
方法?或者我怎样才能释放内存,这样它就不会再崩溃了?
EDIT
我尝试过这样的事情:imageView.setImageResource(-1);
希望它能从内存中删除图像并将其替换为... null 或其他内容,但似乎这对解决问题没有帮助。
如果您可以发布一些代码,将会很有帮助。具体来说,您如何设置ImageView
对象。如果您不使用位图,我希望getBitmap()
将返回 null。但是,如果您使用另一种Drawable
或者以其他方式设置图像,可能会采取类似的路线,但不涉及位图。
EDIT:
好吧,试一试。您可以创建一个Bitmap
来自这样的资源:
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);
然后,像这样使用位图,考虑到 img 是你的ImageView
:
img.setImageBitmap(bm);
//Do some stuff with it, then when memory gets low:
((BitmapDrawable)img.getDrawable()).getBitmap().recycle();
当然,这是考虑到您正在参加一项活动。如果没有,您将必须获取上下文的句柄并替换getResources()
with context.getResources()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)