2014-12-12 3 views
0

Я использую picasso в своем приложении для управления изображениями. Изображения извлекаются с сервера. Несколько изображений довольно большие в 1,5-2 МБ. Изображение загружается & эта часть кажется прекрасной. После того, как мое приложение рухнуло с нехваткой памяти. Но эти изображения извлекаются из res (около 200kb) из 3 изображений. 12-12 12: 50: 17.260: E/AndroidRuntime (32715): FATAL EXCEPTION: main 12-12 12: 50: 17.260: E/AndroidRuntime (32715): java.lang.OutOfMemoryError: (Размер кучи = 49187KB, Выделено = 47999KB) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.graphics.BitmapFactory.nativeDecodeAsset (собственный метод) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.java:486) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.graphics.drawable.Drawable.createFromResourceStream (Drawable.java:773) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.content.res.Resources.loadDrawable (Resources.java:2044) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): на android.content.res.Resources.getDrawable (Resources.java:675) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at com.onmobile.rbt.signal.ui.activities.interfaces.ImageClass.bringInfromRight (ImageClass.java:144) 12-12 12:50: 17.260: E/AndroidRuntime (32715): at com.onmobile.rbt.signal.ui.activities.interfaces.ImageClass.access $ 3 (ImageClass.java:133) 12-12 12: 50: 17.260: E/AndroidRuntime (32715)): at com.onmobile.rbt.signal.ui.activities.interfaces.ImageClass $ 2.run (ImageClass.java:74) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): на android.os. Handler.handleCallback (Handler.java:608) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.os.Handler.dispatchMessage (Handler.java:92) 12-12 12:50: 17.260: E/AndroidRuntime (32715): at android.os.Looper.loop (Looper.java:156) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at android.app.ActivityThread.main (переменный ток tivityThread.java:4987) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at java.lang.reflect.Method.invokeNative (собственный метод) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at java.lang.reflect.Method.invoke (Method.java:511) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run (ZygoteInit.java:784) 12-12 12: 50: 17.260: E/AndroidRuntime (32715): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) 12-12 12 : 50: 17.260: E/AndroidRuntime (32715): at dalvik.system.NativeStart.main (родной метод)Ошибка памяти Пикассо

ответ

0

вы должны использовать изображения небольшого размера. посмотрите этот сайт, https://developer.android.com/training/displaying-bitmaps/load-bitmap.html. используемая память не имеет прямого размера файла. речь идет о размерности изображения. когда ОС (почти вся ОС) рисует изображение, сначала оно получает это изображение в виде растрового изображения и помещает его в кучу. bitmap обычно выделяет 4 байта (ARGB) для каждого пикселя. и, битмап имеет ширину * высота пикселей. так что, например, если у вас есть 5000x5000, только с 2-мя цветами, размер файла может быть размером 10k. размер файла слишком низок, потому что известные форматы изображений, такие как jpeg, png, используют алгоритм сжатия. и 2 цвета означает, что это изображение можно очень хорошо сжимать. хотя размер файла слишком низок, он может поддерживать 5000 * 5000 * 4 (ARGB) = 100.000.000 байт, 100 МБ в куче. и если вы загрузите несколько изображений, подобных этому, вы можете легко начать использовать 1 ГБ памяти (если можете) в виде кучи

+0

, но если я использую picasso, это поможет мне решить эту проблему памяти правильно? – JnJ11

+0

Я предлагаю проверить также их размерность.если их размеры намного превышают размер изображения, который вы используете с ним, вы должны загружать эти изображения как небольшие размеры. существует способ загрузки изображения с меньшим размером в этой ссылке – Adem

0

Попробуйте использовать Fresco Возможно, это решит проблему? Это почти та же концепция, что и Пикассо. Но и читайте это article. Или что рекомендует Google использовать Glide, который рекомендован Google:

Смежные вопросы