Picasso producing OutOfMemoryError

We use Picasso to download all the images in our application, from small avatars to large full-screen images, and we get 1 of these errors for every 10 daily active users. Picasso’s cache is full, but we understand that he must support himself.

Our magazines indicate that these errors most often occur when downloading large full-screen images (1080x1920) and large avatars (720x720) on high-performance devices (Galaxy S4), but sometimes on small avatars (135x135).

com.couchsurfing.mobile.data.PicassoException: Error while loading image with Picasso at com.couchsurfing.mobile.data.DataModule$1.onImageLoadFailed(DataModule.java:158) at com.squareup.picasso.Picasso.complete(Picasso.java:374) at com.squareup.picasso.Picasso$1.handleMessage(Picasso.java:97) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) at dalvik.system.NativeStart.main(NativeStart.java) Caused by: java.lang.RuntimeException: ===============BEGIN PICASSO STATS =============== Memory Cache Stats Max Cache Size: 19173961 Cache Size: 17988408 Cache % Full: 94 Cache Hits: 228 Cache Misses: 244 Network Stats Download Count: 131 Total Download Size: 3375735 Average Download Size: 25768 Bitmap Stats Total Bitmaps Decoded: 206 Total Bitmap Size: 144932008 Total Transformed Bitmaps: 160 Total Transformed Bitmap Size: 40233240 Average Bitmap Size: 703553 Average Transformed Bitmap Size: 195306 ===============END PICASSO STATS =============== at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:117) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) at java.util.concurrent.FutureTask.run(FutureTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:841) at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:394) Caused by: java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeStream(BitmapFactory.java) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) at com.squareup.picasso.NetworkBitmapHunter.decodeStream(NetworkBitmapHunter.java:118) at com.squareup.picasso.NetworkBitmapHunter.decode(NetworkBitmapHunter.java:72) at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:144) at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:101) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) at java.util.concurrent.FutureTask.run(FutureTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:841) at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:394) 
+7
picasso
source share
2 answers

I had the same problem and one of the temporary workarounds is

 <application ... android:largeHeap="true"> 

Currently, I have not found another solution (maybe I have searched insufficiently). But many people have OOM with Picasso.

+1
source share

Do you call fit() when loading images? I suspect that this was my problem, I assumed that the images are reset themselves from Picasso, but you still need to say that it is.

0
source share

All Articles