Glide é uma biblioteca para carregar imagens no Android, apoiada pelo Google através do projeto Bumptech. A biblioteca fornece carregamento eficiente de imagens, animações GIF e quadros de vídeo com gerenciamento automático de memória. De acordo com o repositório do Glide no GitHub, o projeto é usado por mais de 200.000 aplicativos. O Glide é recomendado pelo Google como a biblioteca preferida para carregar gráficos no Android.
Pontos principais
Glide é uma biblioteca para carregamento rápido e eficiente de imagens, GIFs animados e quadros de vídeo em aplicativos Android. O projeto é desenvolvido pela Bumptech sob a égide do Google e é amplamente utilizado em aplicativos oficiais do Google.
A arquitetura interna do Glide é construída em uma abordagem baseada em componentes: o Engine gerencia a execução de requisições, o DecodeJob é responsável pela decodificação e o ResourceDecoder converte dados brutos em Bitmap ou Drawable. Cada etapa pode ser personalizada através de módulos e registros, tornando o Glide uma biblioteca extremamente flexível para formatos de imagem não padronizados.
Ao contrário de muitos concorrentes, o Glide foi projetado desde o início levando em conta as especificidades do Android: ciclo de vida de Activity e Fragment, rotações de tela, mudanças de configuração. A biblioteca pausa e retoma automaticamente os carregamentos dependendo do estado do componente.
De acordo com o Android Developers, o Glide é a biblioteca recomendada para carregamento de imagens na documentação oficial do Google. É usado no Google Play, Google Maps e outros produtos da empresa, confirmando sua confiabilidade e desempenho.
A principal diferença entre o Glide e as alternativas é o redimensionamento automático de imagens para o tamanho do ImageView. Enquanto o Picasso carrega a imagem em resolução total e depois a redimensiona, o Glide decodifica o arquivo diretamente no tamanho necessário. Isso reduz o consumo máximo de memória e acelera a exibição em listas com diferentes tamanhos de célula.
Glide fornece um amplo conjunto de funções para trabalhar com imagens, cobrindo cenários simples e complexos de carregamento de conteúdo.
GIF e WebP animados são carregados e exibidos pelo Glide tão facilmente quanto imagens estáticas. A biblioteca detecta automaticamente o formato pelo tipo MIME e decodifica a animação, exibindo quadros em uma thread em segundo plano. Os métodos asGif e asBitmap estão disponíveis para controle de reprodução.
Glide se vincula automaticamente ao ciclo de vida de Activity, Fragment e View. Quando uma Activity é pausada, os carregamentos são suspensos; quando destruída, são cancelados. Isso evita vazamentos de memória e carregamento de imagens para telas já fechadas. A integração funciona através do suporte a LifecycleOwner.
Glide pode extrair quadros de vídeo por URL ou caminho local. O método asBitmap() em combinação com load() é usado para URIs de vídeo. O Glide seleciona automaticamente um quadro-chave ou um quadro em um timestamp especificado. Isso é útil para exibir prévias de vídeo.
GlideApp é uma classe gerada que fornece uma API estendida baseada na configuração do AppGlideModule. Permite usar métodos indisponíveis no Glide.with padrão: carregamento com opções personalizadas padrão, integração com bibliotecas e transformações predefinidas. A geração requer a anotação @GlideModule em uma classe que estende AppGlideModule.
Glide usa uma arquitetura em múltiplas camadas com motor, decodificadores, transformações e cache. Cada requisição passa por uma cadeia de manipuladores que otimizam o carregamento para um ImageView específico.
Quando into(view) é chamado, o Glide verifica o cache: recursos ativos, cache em memória, cache em disco e só então a rede. A imagem é automaticamente redimensionada para o tamanho do ImageView de destino levando em conta a densidade da tela e o scaleType. Isso reduz o uso de memória — uma vantagem chave do Glide.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
A instalação do Glide é feita via Gradle. A biblioteca requer configuração através do AppGlideModule para geração de API. A versão mínima da Android API é 21.
No build.gradle, adicione o Glide com o processador de anotações kapt para geração da API GlideApp. Para Kotlin, use kapt em vez de annotationProcessor. A versão 4.16+ do Glide funciona de forma estável com o Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Use kapt para Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule é um componente obrigatório para configurar o Glide. Ele permite definir o tamanho do cache, um HttpStack personalizado e registrar decodificadores próprios. O módulo é escaneado pelo Glide na inicialização do aplicativo. A anotação @GlideModule o registra automaticamente.
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
int diskCacheSize = 250 * 1024 * 1024;
builder.setDiskCache(
new DiskLruCacheFactory(cacheDir.getPath(), diskCacheSize)
);
}
}
Os exemplos abaixo demonstram cenários típicos: carregamento de imagens, trabalho com GIF e extração de quadros de vídeo.
O carregamento básico via Glide.with().load().into() — código mínimo para exibir uma imagem da rede. O Glide se ajusta automaticamente ao tamanho do ImageView. O placeholder é mostrado durante o carregamento e error em caso de falha.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
Um GIF é carregado da mesma forma que uma imagem estática — o Glide detecta automaticamente o formato pelo tipo de conteúdo. Para forçar o carregamento como imagem estática, use asBitmap(); para GIF, use asGif(). O Glide decodifica eficientemente apenas os quadros visíveis.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Carregar o primeiro quadro de um GIF como imagem estática
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Um quadro de vídeo é extraído pelo Glide de uma URI de vídeo local ou remota. Por padrão, o Glide carrega o quadro-chave. Para especificar um timestamp específico, use frameMillis. Isso é útil para exibir prévias em uma galeria de vídeos.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
A otimização do Glide para RecyclerView é uma habilidade crítica ao desenvolver aplicativos com grande quantidade de imagens. A configuração adequada evita travamentos e erros OOM.
Um dos principais recursos do Glide é a integração com RecyclerView através do RecyclerViewPreloader. Este componente analisa a velocidade de rolagem e a direção, pré-carregando imagens que aparecerão na tela em alguns itens. Para usar o pré-carregador, você precisa implementar a interface PreloadSizeProvider e passá-la ao construtor junto com o ImageView de destino.
Usar o método override() com dimensões exatas do ImageView acelera significativamente o carregamento. Quando o Glide sabe o tamanho exato do destino, ele pode decodificar a imagem diretamente na resolução necessária, pulando a etapa de redimensionamento. Isso reduz o tempo de decodificação e o consumo máximo de memória em 30–40%.
Para feeds com conteúdo heterogêneo, use diferentes RequestOptions para cada tipo de item. Por exemplo, para imagens de banner grandes, você pode definir override(1200, 600) e qualidade RGB_565, enquanto para avatares — override(200, 200) e arredondamento via transform. Essa abordagem usa os recursos de forma ideal para cada tipo de conteúdo.
Glide oferece opções flexíveis para tratamento de erros através de imagens de erro e RequestListener personalizado. O RequestListener permite reagir ao carregamento bem-sucedido ou à falha — registrar erros ou enviar análises. Você também pode configurar um fallback — uma imagem mostrada quando load() recebe null em vez de uma URL.
Use RecyclerViewPreloader para pré-carregar imagens antes que o usuário role até elas. O Glide suporta integração com RecyclerView através de um pré-carregador que analisa a velocidade de rolagem e carrega imagens antecipadamente.
A multiplicação de thumbnail permite mostrar primeiro uma versão reduzida da imagem e depois carregar a versão completa. Chamar thumbnail(0.25f) carrega uma versão de 25% do tamanho que é exibida imediatamente, enquanto a imagem em tamanho completo é carregada depois. Isso cria a impressão de carregamento instantâneo.
Para adaptadores de lista, use .override() com dimensões exatas do ImageView para que o Glide não redimensione a imagem toda vez. Isso reduz a carga da CPU e o consumo de memória. O tamanho do cache é selecionado experimentalmente, mas 250 MB para disco e 20% da memória disponível são um bom ponto de partida.
Perguntas frequentes
Glide suporta GIF, quadros de vídeo e WebP animados. Ele gerencia a memória de forma mais eficiente e é recomendado pelo Google. Picasso é menor em tamanho e mais simples de usar. Para projetos complexos, escolha Glide.
Glide aceita um LifecycleOwner (Fragment, Activity) ou View. A biblioteca rastreia automaticamente o estado através do LifecycleObserver: pausa o carregamento ao pausar e cancela ao destruir, evitando vazamentos.
Sim, use asBitmap() antes de load(). O Glide carregará o GIF como uma imagem estática e mostrará apenas o primeiro quadro. Isso é útil para listas onde a animação GIF é indesejável por questões de desempenho.
O cache do Glide consiste em três níveis: recursos ativos (em uso atualmente), memória (cache LRU) e disco (LruCache). Imagens carregadas do cache são exibidas instantaneamente. O cache é limpo automaticamente quando a memória está baixa.
Um cliente HTTP personalizado é registrado através do OkHttpUrlLoader no AppGlideModule. Sobrescreva registerComponents e registre seu OkHttpClient. Isso permite adicionar interceptadores, certificados e timeouts personalizados.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também