Existem algumas coisas que você pode tentar se seu programa exibir tremores ou lentidão ao rolar ou paginar. O que faz com que você use recursos como GPU Overdraw e Profile GPU rendering para descobrir onde estão os problemas. Mas às vezes você simplesmente não consegue descobrir o problema do atraso porque isso é basicamente devido a uma imagem, que é precisamente um bitmap . Se seu aplicativo Android usa imagens pesadas ou bitmaps, então certamente seu aplicativo verá uma grande queda de desempenho e sofrerá um atraso indesejado que pode agitar o usuário e fazer com que ele desinstale, algo que você não desejaria nunca. Como resultado disso, sempre que a imagem acumula , basicamente chama o Garbage Collecto r e chama-o frequentemente causa o congelamento da interface do usuário.

A solução?

A solução para esse problema é bastante simples e você pode até mesmo usá-lo sem saber com algumas bibliotecas modernas como Glide ou Picasso ! Glide Bitmap Pool é uma biblioteca de gerenciamento de memória que permite reutilizar a memória de bitmap. Como ele reutiliza a memória de bitmap, não há necessidade de chamar o Coletor de Lixo repetidamente, resultando em um programa de funcionamento mais suave. Em versões compatíveis do Android, ele decodifica o bitmap usando inBitmap . Aproveitando o pool de bitmap para minimizar a alocação e desalocação constante de memória em seu aplicativo, você reduz a sobrecarga de GC, resultando em um aplicativo mais estável.

Assista a este vídeo de 100 dias de desenvolvedores do Google para entender como reutilizar os bitmaps e evitar que seu aplicativo travar / travar.

Explicação

Suponha que precisamos importar 10 bitmaps para nosso aplicativo Android. Quando carregamos o bitmap um, a memória para o bitmap um é alocada. Então, depois de um tempo quando não precisarmos mais do bitmap um, não devemos reciclar o bitmap (já que a reciclagem envolve chamar GC). Use este bitmap um como um inBitmap para o bitmap dois. A mesma memória pode, portanto, ser utilizada para o bitmap dois.

Reutilizando o mesmo bitmap

Vamos aplicar a explicação acima em um projeto Android da vida real para entender melhor o conceito de reutilização:

Bitmap gfgBitmap = BitmapFactory.decodeFile(gfgPath);
imageView.setImageBitmap(gfgPath);
  
// Here the gfgPath is the path of 
// the bitmap where it is located.
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePathTwo, options);
  
if (canUseForInBitmap(bitmapOne, options)) {
    options.inMutable = true;
    options.inBitmap = bitmapOne;
    // Setting these options are 
    // the most important part!!!!!
}
  
options.inJustDecodeBounds = false;
Bitmap gfgBitmap2 = BitmapFactory.decodeFile(gfgPath2, options);
imageView.setImageBitmap(gfgPath2);

Com isso, agora você pode reutilizar os bitmaps sem chamar o GC repetidamente e, portanto, seu aplicativo Android melhorou o desempenho e agora não vai atrasar devido à reutilização dos Bitmaps.

Quer um ambiente mais competitivo e acelerado para aprender os fundamentos do Android?
Clique aqui para acessar um guia com curadoria exclusiva de nossos especialistas com o objetivo de torná-lo pronto para a indústria em nenhum momento!