【问题标题】:Out Of Memory with images in Android 5Android 5 中的图像内存不足
【发布时间】:2014-12-03 16:42:27
【问题描述】:

我的应用程序从网络加载大量图像并通过BitmapFactory.decodeByteArray 对其进行解码。但是当应用程序被解码时,许多图像会抛出错误java.lang.OutOfMemoryError。所以在我在BitmapFactory.Options 中设置标志inPurgeable = true 之前,这个错误永远不会打扰我。

在 Android 5 中,BitmapFactory.Options.inPurgeable 已弃用,在解码大量图像后再次抛出 java.lang.OutOfMemoryError

我应该在 Android 5 中使用什么来避免这个错误?

编辑:

我的代码:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
bitmap = BitmapFactory.decodeByteArray(buffer.toByteArray(), 0, buffer.length(), options);

这一切。这在 Android 4 或更低版本上运行良好。

Android 5 上的堆栈跟踪:

    11-24 22:40:06.738: E/AndroidRuntime(19216): FATAL EXCEPTION: AsyncTask #3
    11-24 22:40:06.738: E/AndroidRuntime(19216): java.lang.RuntimeException: An error occured while executing doInBackground()
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at java.lang.Thread.run(Thread.java:818)
    11-24 22:40:06.738: E/AndroidRuntime(19216): Caused by: java.lang.OutOfMemoryError: Failed to allocate a 1638412 byte allocation with 326188 free bytes and 318KB until OOM
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
    11-24 22:40:06.738: E/AndroidRuntime(19216):    at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:522)
...

【问题讨论】:

  • 可以添加一些代码。
  • @TimRijckaert 要添加什么?
  • 这些图片是本地存储的吗?你在网上取吗?你能显示堆栈跟踪吗?一些代码也可能有助于社区了解您现在在做什么,但它只是模糊的。
  • @TimRijckaert 我更新了问题
  • 看看这是否对你有帮助:stackoverflow.com/questions/26941509/…

标签: java android image-processing out-of-memory


【解决方案1】:

【讨论】:

  • Google 决定终止链接的那一天终将到来。所以我未来的自己会偶然发现你的答案并想知道,你的答案到底是什么?
  • 不幸的是,这是一个由谷歌提供的五部分教程,很难提炼成简短的答案。唉,这就是我一直在寻找的,但我现在需要阅读教程。
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2013-05-08
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多