java - Android 5 中的图像内存不足

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

我的应用程序从网络加载大量图像并通过 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)
...

最佳答案

关于java - Android 5 中的图像内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27111769/

相关文章:

java - “找不到或加载主类”是什么意思?

java - 错误: -Xdiag and String cannot be converted to int

android - 在路径 : DexPathList 上找不到类

灰度图像中的 MATLAB 像素值

java - MySQL - 必须被捕获或声明被抛出

java - 自动注释 Java 类的程序/脚本

java - ViewPagerIndicator - 将 TabPageIndicator 设置到中心

android - 与 IBM Worklight 的数据库连接以进行 Android 应用程序开发

image - 在 Matlab 中将灰度图像转换为彩色图像

matlab - 如何将 RGB 图像转换为灰度图像但保留一种颜色?