2014-06-17 11 views
7

Używamy Picassa do ładowania wszystkich obrazów w naszej aplikacji, od małych awatarów po duże obrazy pełnoekranowe i otrzymujemy 1 z tych błędów na każde 10 aktywnych użytkowników dziennie. Pamięć podręczna Picassa wypełnia się, ale rozumiemy, że powinna się utrzymywać.Picasso produkuje OutOfMemoryError

Nasze dzienniki wskazują, że te błędy występują najczęściej podczas ładowania dużych pełnoekranowych obrazów (1080x1920) i dużych awatarów (720x720) na urządzeniach zaawansowanych (Galaxy S4), ale czasami na małych awatarach (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) 
+0

Czy używasz tego w adapterze? – Michael

+0

Otrzymujemy ten błąd w całej aplikacji. W programie ListAdapters PagerAdapters i w normalnych układach. – nathanielwolf

+0

Czy używasz swojej własnej instancji programu Picasso w wersji singleton w całej aplikacji? – Michael

Odpowiedz

1

miałem ten sam problem i jeden z przejściowych obejścia jest

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

Na razie nie znalazłem inne rozwiązanie (może Rozglądałem nie wystarczy). Ale wielu ludzi ma OOM z Picasso.

0

Czy dzwonisz pod numer fit() podczas ładowania zdjęć? Podejrzewam, że to był mój problem, założyłem, że obrazy są próbkowane przez Picassa, ale nadal musisz to powiedzieć.