Android setImageURI内存不足错误

时间:2010-06-11 07:33:44

标签: android image memory

我的活动非常小,必须显示图片。

如果图片不是很小(例如1.12 Mb 2560x1920),它会在更改屏幕方向上产生内存不足。我试过getDrawable.setCallback(null),但没有运气。

我哪里错了?

public class Fullscreen extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.gc();
    setContentView(R.layout.fullscreen);
    ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
    long imageId = 2;
    imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId));
    }
}

4 个答案:

答案 0 :(得分:11)

尝试将此添加到onDestroy方法:

ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable();
bd.getBitmap().recycle();
imageView.setImageBitmap(null);

它将回收ImageView中使用的位图。

答案 1 :(得分:4)

使用更少的内存和缩减采样/调整大小(参见BitmapOptions#inSampleSize的文档)图片。

答案 2 :(得分:1)

您的申请必须泄露上下文。这通常是应用程序在多次方向更改后崩溃的原因。请仔细阅读http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

答案 3 :(得分:1)

您也可以使用以下内容:

        File picture = new File("path_to_image");
        if (picture.exists()) {
            ImageView imageView = (ImageView)findViewById(R.id.imageView);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 2;
            Bitmap myBitmap = BitmapFactory.decodeFile(picture.getAbsolutePath(), options);
            imageView.setImageBitmap(myBitmap);
        }

阅读以下链接,了解有关BitmapFactory选项的更多信息(特别是inSampleSize,它控制子采样的程度):http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html