【问题标题】:Android setImageURI out of memory errorAndroid setImageURI 内存不足错误
【发布时间】:2010-06-11 07:33:43
【问题描述】:

我有一个非常小的活动必须显示图像。

如果图片不是非常小(例如 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));
    }
}

【问题讨论】:

    标签: android image memory


    【解决方案1】:

    尝试将其添加到您的 onDestroy 方法中:

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

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

    【讨论】:

    • 很棒的帖子,但您可以添加一个强制性的if != null 检查 bd :)
    • 如果你总是在你的 onCreate 中设置drawable ;)
    • 回收似乎是一种非常古老的方法。 Android 4.0 有必要吗?
    • 罗恩和金戈,谢谢。最好包括空检查。此外,当从另一个活动(通常是相机)返回时,图像视图应该调用 setImageBitmap(null) 和 destroyDrawingCache() 来显示新图像。
    【解决方案2】:

    消耗更少的内存和下采样/调整大小(参见 BitmapOptions#inSampleSize 的文档)图片。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你也可以这样使用:

                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

        【讨论】:

          猜你喜欢
          • 2013-01-17
          • 2012-03-07
          • 2013-11-01
          • 2014-12-30
          • 2013-01-17
          • 1970-01-01
          • 2013-05-13
          • 2011-12-08
          相关资源
          最近更新 更多