简体   繁体   English

内存不足,Android 5中的图像

[英]Out Of Memory with images in Android 5

My app loading lot of images from network and decode it via BitmapFactory.decodeByteArray . 我的应用程序从网络加载了大量图像,并通过BitmapFactory.decodeByteArray对其进行解码。 But when the application is decoded many images throws error java.lang.OutOfMemoryError . 但是,当应用程序被解码时,许多图像会引发错误java.lang.OutOfMemoryError So before i set flag inPurgeable = true in BitmapFactory.Options and this error will never not bother me. 因此,在BitmapFactory.Options中将标志设置为inPurgeable = true之前,此错误将永远不会困扰我。

In Android 5 field BitmapFactory.Options.inPurgeable is deprecated and java.lang.OutOfMemoryError is thrown again after decoding a large amount of images. 在Android 5中,不建议使用BitmapFactory.Options.inPurgeable字段,并且在解码大量图像后会再次引发java.lang.OutOfMemoryError

What I should use in Android 5 to avoid this error? 我应该在Android 5中使用什么以避免此错误?

EDIT: 编辑:

My code: 我的代码:

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

It all. 这一切 This works fine on Android 4 or less. 在Android 4或更低版本上可以正常使用。

Stacktrace on Android 5: Android 5上的Stacktrace:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM