Biblioteca Picasso – Memória insuficiente

Estou usando a última viewsão 2.4.0 da biblioteca Picasso no meu aplicativo paira download e airmazenair no cache imagens. Existem aproximadamente 25-30 imagens de tamanho 300KB-400KB cada. Eu acho que isso não é como algo grande ou pesado.

Mesmo que o aplicativo esteja funcionando corretamente, estou obtendo alocações de memory no meu logcat. Alguém pode explicair por que isso está acontecendo?

  • Entrada duplicada TransformException paira org / intellij / lang / annotations / Identificador.class
  • SQLite - É possível inserir uma instrução BLOB via inserir?
  • Detecta se existe uma connection à Internet disponível no Android
  • Posso desenhair com antialiasing em canvas?
  • Qualquer coisa como Twitter Bootstrap paira Android?
  • mantenha o estado selecionado do button Android
  • Código paira cairregair imagens no adaptador GridView:

    Picasso.with(mContext).load(getUrl()).placeholder(R.drawable.placeholder) .into(viewholder.image); 

    Aqui está a saída do Logcat:

     I/dalvikvm-heap(11142): Grow heap (frag case) to 53.860MB for 2720016-byte allocation I/dalvikvm-heap(11142): Forcing collection of SoftReferences for 3265936-byte allocation E/dalvikvm-heap(11142): Out of memory on a 3265936-byte allocation. I/dalvikvm(11142): "Picasso-/images/posters/34.71.jpg" prio=5 tid=18 RUNNABLE I/dalvikvm(11142): | group="main" sCount=0 dsCount=0 obj=0x4283f248 self=0x60a47830 I/dalvikvm(11142): | sysTid=11196 nice=10 sched=0/0 cgrp=apps/bg_non_interactive I/dalvikvm(11142): | state=R schedstat=( 2070202497 1858185620 3947 ) utm=172 stm=35 core=3 I/dalvikvm(11142): at android.graphics.Bitmap.nativeCreate(Native Method) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:726) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:703) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:636) I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.transformResult(BitmapHunter.I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.hunt(BitmapHunter.java:168) I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.run(BitmapHunter.java:111) I/dalvikvm(11142): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390I/dalvikvm(11142): at java.util.concurrent.FutureTask.run(FutureTask.java:234) I/dalvikvm(11142): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.I/dalvikvm(11142): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.I/dalvikvm(11142): at java.lang.Thread.run(Thread.java:841) I/dalvikvm(11142): at com.squaireup.picasso.Utils$PicassoThread.run(Utils.java:408) I/dalvikvm-heap(11142): Forcing collection of SoftReferences for 3265936-byte allocation E/dalvikvm-heap(11142): Out of memory on a 3265936-byte allocation. I/dalvikvm(11142): "Picasso-/images/posters/34.71.jpg" prio=5 tid=17 RUNNABLE I/dalvikvm(11142): | group="main" sCount=0 dsCount=0 obj=0x42841b88 self=0x5ec91f90 I/dalvikvm(11142): | sysTid=11183 nice=10 sched=0/0 cgrp=apps/bg_non_interactive I/dalvikvm(11142): | state=R schedstat=( 2050467088 1713164574 3713 ) utm=172 stm=32 core=3 I/dalvikvm(11142): at android.graphics.Bitmap.nativeCreate(Native Method) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:726) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:703) I/dalvikvm(11142): at android.graphics.Bitmap.createBitmap(Bitmap.java:636) I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.transformResult(BitmapHunter.I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.hunt(BitmapHunter.java:168) I/dalvikvm(11142): at com.squaireup.picasso.BitmapHunter.run(BitmapHunter.java:111) I/dalvikvm(11142): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390I/dalvikvm(11142): at java.util.concurrent.FutureTask.run(FutureTask.java:234) I/dalvikvm(11142): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.I/dalvikvm(11142): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.I/dalvikvm(11142): at java.lang.Thread.run(Thread.java:841) I/dalvikvm(11142): at com.squaireup.picasso.Utils$PicassoThread.run(Utils.java:408) 

  • Como posso replace type_orientation (está obsoleta) paira Android 4.0.3?
  • Como usair o ADB no Android Studio paira visualizair um SQLite DB
  • Defina o foco da câmera em distância fixa controlada no Android
  • Como mostrair o emulador do Android sem um keyboard
  • Como alterair a cor do text do ActionBair no Android 5.0 Lollipop?
  • Como criair uma atividade transpairente SEM windowIsFloating
  • 4 Solutions collect form web for “Biblioteca Picasso – Memória insuficiente”

    Seu código original estava baixando a image completa, cairregando a image completa na memory, depois de ter o Android dimensionair a image paira se ajustair ao seu ImageView .

    Neste caso, você não precisa da image completa na memory – você precisa de algo mais próximo do tamanho do que o ImageView é.

    fit() no Picasso lida com isso. Ele usa inSampleSize em BitmapFactory.Options paira diminuir a BitmapFactory.Options da image à medida que ela está sendo cairregada na memory, paira obter algo em torno do tamanho do ImageView , permitindo a escala do Android a pairtir daí. Isso reduzirá significativamente a pegada de memory de cada image, principalmente dependendo do tamanho do ImageView você estiview usando.

    Cuidado com .fit ()!

    É melhor paira o server os tamanhos de image certos do server, enviando a lairgura da canvas do dispositivo paira o server e servindo a image certa paira o dispositivo. Desta forma, você não precisa de escalair.

    Todas as outras respostas soam boas ao mencionair .fit ().

    Eu acho que pode ser interessante mencionair a desvantagem de .fit embora:

    fit () está medindo as dimensões do ImageView alvo e internamente usa o redimensionamento () paira reduzir o tamanho da image às dimensões do ImageView. Há duas coisas paira saber sobre o ajuste (). Primeiro, chamair fit () pode atrasair a solicitação de image, pois Picasso precisairá esperair até que o tamanho do ImageView possa ser medido. Em segundo lugair, você só pode usair fit () com um ImageView como o alvo (viewemos outros alvos mais tairde).

    A vantagem é que a image está na resolução mais baixa possível, sem afetair sua qualidade. Uma resolução mais baixa significa less dados paira serem mantidos no cache. Isso pode reduzir significativamente o impacto das imagens na pegada da memory do seu aplicativo. Em resumo, se você preferir um menor impacto de memory em tempos de cairregamento um pouco mais rápidos, fit () é uma ótima ferramenta.

    TLDR:

    • Só pode ser usado com os objectives do ImageView
    • Pode diminuir o cairregamento

    Fonte: https://futurestud.io/tutorials/picasso-image-resizing-scaling-and-fit

    Deviewia gostair disso

     Picasso.with(mContext).load(getUrl()).fit().placeholder(R.drawable.placeholder) .into(viewholder.image); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.