释放Android中Drawable占用的内存

3

我正在使用一个服务,在某个时候需要运行以下代码:

Bitmap wallpaperBitmap = ((BitmapDrawable) WallpaperManager
                                .getInstance(getApplicationContext()).getDrawable()).getBitmap();

然后将此位图设置为背景,通过在我的服务中保留的视图来使用。
View.setBackground(new BitmapDrawable(res, wallpaperBitmap));

问题是从WallpaperManager获取drawable后,我的服务的RAM使用量会立即增加,因为wallpaperBitmap被保留在内存中。或者可能是WallpaperManager返回的drawable被保留在内存中(我不确定)。如何释放这个背景的内存?

需要注意的是:我会在一段时间后将视图的背景更改为颜色,并且位图不再作为背景显示,但RAM永远不会被释放。我还尝试了`wallpaperBitmap.recycle()`,但内存仍未清除。如何从WallpaperManager中释放该内存?

2个回答

1
你可以使用bitmap.recycle()。它会释放与位图相关联的对象并清除对像素数据的引用,从而允许进行垃圾回收。

是的,我正在做那个。忘了提到。但是内存仍然没有清除。 - Alex Newman
你也可以使用第三方库,如Picasso(https://github.com/square/picasso)和Universal Image Loader(https://github.com/nostra13/Android-Universal-Image-Loader),以高效地加载图像。 - pawar

0
你可以尝试这个。它会立即释放内存。
bitmap.recycle();
bitmap = null;

谢谢,但实际上这并不起作用。 我尝试过了,没有帮助。 我认为问题在于 WallpapaperManager.getDrawable() - Alex Newman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接