Android 5中图片导致内存溢出问题

5

我的应用从网络加载很多图片,并通过BitmapFactory.decodeByteArray解码。但是,当应用程序解码许多图像时,会抛出错误java.lang.OutOfMemoryError。因此,在设置标志inPurgeable = true之前,我将其应用于BitmapFactory.Options,并且这个错误将不再困扰我。

在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)
...

也许加入一些代码。 - timr
@TimRijckaert 要添加什么? - Miraslau Rachkouski
这些图片是本地存储的吗?还是从网络上获取的? 能否展示一下堆栈跟踪信息。提供一些代码也有助于社区了解您正在做什么,现在只是含糊不清的描述。 - timr
@TimRijckaert 我更新了问题。 - Miraslau Rachkouski
看看这个,看看它是否能帮到你:http://stackoverflow.com/questions/26941509/android-fragment-with-three-listviews-crashes-with-out-of-memory-error/26941825#26941825 - JLONG
1个回答

1

1
有一天,谷歌决定杀掉链接。因此,我的未来自己会偶然发现你的答案,并想知道,你的答案到底是什么? - Neon Warge
不幸的是,这是谷歌的一个由五部分组成的教程,很难用简短的回答来概括。唉,这正是我在寻找的,但现在我需要阅读整个教程了。 - autonomy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接