【问题标题】:outofmemory error using bitmaps Android使用位图Android的内存不足错误
【发布时间】:2013-08-20 11:43:14
【问题描述】:

我创建了一个 android 应用程序,它从图库中选择一张图片并显示预览。

@Override
public void onClick(View v) {
    if (v.getId()== R.id.button){

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_PICK);
        startActivityForResult(Intent.createChooser(intent,
                "Select Picture"), SELECT_PICTURE);
    }

选择图像后,应显示预览。

然而,它只是第一次工作。后来当我点击返回时,它显示outOfMemoryException

【问题讨论】:

标签: java android bitmap out-of-memory


【解决方案1】:

在 android 中使用位图会消耗大量内存,由于内存泄漏,需要特别注意。

你可以随时使用

System.gc()

垃圾收集并释放一些内存。

bitmap.recycle();

查看我在开发图像编辑应用程序时使用的这些博客文章。

【讨论】:

  • 在这种情况下不建议调用垃圾收集器。如果您使用的是 Android 3 上,您不必调用 recycle,但不得保留对位图的任何引用超出您的活动范围。
  • 没问题,也看看我的回答,你可能会发现它很有用,它是给我的。祝你好运
【解决方案2】:

在 android 中使用位图经常会引发 OutOfMemory 错误。位图需要正确处理。您可能想查看以下专门用于在 android 中加载和处理位图的库:

https://github.com/nostra13/Android-Universal-Image-Loader

https://github.com/novoda/ImageLoader

您还可以实现自己的图像加载器。你可以很容易地找到它的代码。

【讨论】:

    【解决方案3】:

    您可能正在缓存很多位图,因此您可以使用ImageLoader 并执行以下操作:

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                    this).memoryCache(new WeakMemoryCache())
                    .discCache(new UnlimitedDiscCache(new File("/cache"))).build();
    

    在您不再需要位图后,也可以尝试以某种方式释放它们

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多