再次设置Bitmap时抛出OutofMemory

时间:2015-07-03 12:03:15

标签: android bitmap android-drawable

我正在使用一个菜单,用户可以在其中选择要显示的类别。类别开始后,我会在后台加载图层并将其用作GestureImageView的资源。这很好用,但是当我这样做了几次。在类别选择和地图之间来回,它会抛出OutOfMemory Exception

这是用于创建GestureImageView的方法。 bgverkenning drawable在每个可绘制的地图中,尺寸根据4:6:8:12(mdpi - hdpi - xhdpi - xxhdpi)。

private void loadImageFromStorage(String path, String name)
{

    try {

        File f=new File(path, name);
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        options.inSampleSize=2;
    //    options.inJustDecodeBounds = true;
        Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f),null,options);

        BitmapFactory.Options options2=new BitmapFactory.Options();
        options2.inPreferredConfig = Bitmap.Config.RGB_565;

        Drawable laag = new BitmapDrawable(b);
        Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.bgverkenning, options2);

        Drawable bg = new BitmapDrawable(back);
        Drawable [] lagen = {bg,laag};
        LayerDrawable ld = new LayerDrawable(lagen);
        map.setImageDrawable(ld);
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

}

当活动停止时,将删除drawable。

@Override
protected void onStop() {
    super.onStop();
    Drawable d = map.getDrawable();
    if(d!=null) d.setCallback(null);
    map.setImageDrawable(null);
}

3 个答案:

答案 0 :(得分:2)

如前所述,您应该使用库。我建议Glide易于使用。 Glide LayerDrawable with Glide

答案 1 :(得分:1)

位图对于Android来说真的很重要。考虑使用此库来设置图片: https://square.github.io/picasso/

答案 2 :(得分:0)

在Java文件中使用它

roundBitmap.recycle();