Carregamento e Cache de Imagem Com Universal Image Loader no Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Carregamento e Cache de Imagem Com Universal Image Loader no Android

Carregamento e Cache de Imagem Com Universal Image Loader no Android

Vinícius Thiengo
(7833) (11)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa, blz?

Nesse vídeo mostro como realizar carregamento de imagens da Web e além de apresenta-las no screen do device do usuário salva-las também na memória do aparelho e SDCard para que as imagens continuem sendo carregadas mesmo quando não há mais conexão com a Internet. A lib open source utilizada é a Universal Image Loader que além de ser bem consistente (mais de três anos de lib) é muito simples de se utilizar. A lib nos fornece um grande conjunto de métodos para customização, mas acredito que os métodos relacionados a cache são os de maior importância, e apesar de podermos escolher qual cache utilizar (ou ambas) recomendo a utilização de ambas, memória e SDCard, caso sua APP começar a ter problemas de vazamento de memória não acredito que deixar apenas uma das opções lhe ajudará muito, nesse caso recomendo que você destrinche os métodos todos realicionados ao carregamento da imagem e as caches, pois a lib é quase toda reconfigurável. A lib Universal Image Loader nos permite trabalhar como algumas configurações de estilização da imagem, que apesar de serem simples chamadas métodos são as vezes trabalhos pesados internamente no Android, logo recomendo que qualquer trabalho na imagem que tenha configuração de qualidade, tamanho, crop, ... seja esses realizados no servidor que tem muito mais memória e processador para isso, caso contrário há o risco de Exception. No mais é isso, não tem muito o que falar, recomendo a lib para carregar imagens de servidores remotos, para carregar loca utiliza um simples ImageView, já é o suficiente.

O link para download do projeto se encontra logo abaixo no post

Segue link do vídeo do BaseAdapter para auxiliar no entendimento do vídeo acima:

Utilizando BaseAdapter Para Personalização Completa da ListView

Segue links das páginas da lib Universal Image Loader apresentadas no vídeo:

Página principal da lib no GitHub

Página de apresentação do fluxo de trabalho da lib

Página de informações úteis sobre a utilização da lib

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Google Cloud Messaging (GCM) no AndroidGoogle Cloud Messaging (GCM) no AndroidAndroid
AutoCompleteTextView no Android, Entendendo e UtilizandoAutoCompleteTextView no Android, Entendendo e UtilizandoAndroid
AccountManager no Android, Entendendo e UtilizandoAccountManager no Android, Entendendo e UtilizandoAndroid
Vendendo Produtos e Inscrições Com Google In-App Billing no AndroidVendendo Produtos e Inscrições Com Google In-App Billing no AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (11)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
jhonny Ferrari (1) (0)
22/10/2015
Thiengo to trabalhando em cima dessa aplicação,
http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/

e tenho salvado imagem no banco de dado, como posso fazer para ele ler?, tentei aplicar essa seu exemplo mas nao estou conseguindo
Responder
Vinícius Thiengo (1) (0)
24/10/2015
Fala Jhonny, blz?
Estou assumindo está salvando a imagem em um folder no servidor Web e então salvando somente o nome dela no database, correto? O que deve fazer é  retornar para a APP o caminho completo de acesso a imagem, exemplo: se ela está no folder imagens do servidor http://www.test.com.br , então o path completo de acesso seria: http://www.test.com.br /imagens/nomeDaImagem.png. Caso em que é uma imagem png. Tentou assim? Veja o uso da library Fresco para carregamento de imagens (http://www.thiengo.com.br/lib-fresco-para-carregamento-de-imagens-com-gifs-e-webps-animados-material-design-android-parte-12 ), recomendo ela ao invés da UIL. Abraço
Responder
JHONNY (1) (0)
06/11/2015
Aproveitando um pouco mais da sua sabedoria Thiengo, a aplicaçao funciona assim, quando sai a oferta da semana em um super mercado, o funcionario abre a tela de cadastro em php, ai cadastra o nome e o preço e coloco a foto, ex: nome: banana, preço: 1,00 foto: banana1.png, salva no banco mysql, como eu faria para buscar sem colocar a url, ele trazer a foto pelo ID dela, pq nao posso ficar criando url para cada foto
Responder
Vinícius Thiengo (0) (0)
07/11/2015
Jhonny, no caso foi salvo o nome da imagem no bd ou ela em tipo BLOB?

No primeiro caso vc não cria um url, a imagem vai estar em um diretório de seu server e então vc retornará o url do site com o path até o diretório da imagem junto ao nome da imagem, isso é inevitável se estiver com essa opção (que é a melhor).

Com o tipo BLOB e a imagem sendo salva no bd, vc pode enviar a imagem em bytes para o APP, então terá de utilizar algumas entidades para conversão e criar a imagem a partir dos bytes enviados.

Utilize o modo url com o Fresco (http://www.thiengo.com.br/lib-fresco-para-carregamento-de-imagens-com-gifs-e-webps-animados-material-design-android-parte-12 ), sem sombra de dúvidas uma excelente opção. Outra library que pode testar que é mais simples e tb eficiente é o Picasso (http://square.github.io/picasso/ ). Abraço
Responder
Ricardo (1) (0)
07/05/2015
Thiengo blz, Cara estou usando o Picasso para carregar as imagens , carrego varias imagens do servidor no listiview com loadmore, mais esta dando  Out of Memory como posso resolver ?
Responder
Vinícius Thiengo (0) (0)
08/05/2015
Fala Ricardo, blz?
Diminua o tamanho em bytes das imagens (uma forma de solucionar). Pode diminuir o tamanho (largura altura) da imagem e junto pode tb retirar um pouco de qualidade. Se não me engano, até 50% de qualidade a menos na imagem original o ser humano tem mta dificuldade para perdeber a perda de qualidade. Abraço
Responder
wiliam (2) (0)
27/03/2015
Ola thiengo, exelente aula. Me tira uma duvida Thiengo, esse carregamento dessas imagens q eu to fazendo aqui na minha app é muito pesado?


public Bitmap getIcon(String nomeIcon){

if(nomeIcon.equals("nenhum(a)")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_nenhum);

}else if(nomeIcon.equals("icon1")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon1);

}else if(nomeIcon.equals("icon2")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon2);

}else if(nomeIcon.equals("icon3")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon3);

}else if(nomeIcon.equals("icon4")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon4);

}else if(nomeIcon.equals("icon5")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon5);

}else if(nomeIcon.equals("icon6")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon6);

}else if(nomeIcon.equals("icon7")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon7);

}else if(nomeIcon.equals("icon8")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon8);

}else if(nomeIcon.equals("icon9")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon9);

}else if(nomeIcon.equals("icon10")){

fandomB = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon10);

}

return fandomB;
}

holder.icon.setImageBitmap(getIcon(iconsAdapter[position]) );


estou carregando varias imagens em uma lista e eu percebo q fica meio lento e as vezes da uma travada, você me recomendaria essa lib para eu fazer esse carregamento de uma maneira mais leve? Desd já obrigado cara. Abraços.
Responder
Vinícius Thiengo (1) (0)
27/03/2015
Fala Wilian, blz?
Utilize o Picasso (http://square.github.io/picasso/ ) ou o ImageLoader do Volley (esse último tende a ser mais rápido), já tive outros reclamando dessa lib tb. O Picasso não tenho vídeo, mas o ImageLoader Volley sim (http://www.thiengo.com.br/imageloader-com-a-lib-volley-no-android ). Abraço
Responder
Ronnie (1) (0)
12/12/2014
O que utilizar: O imageLoader da lib Volley ou o universal image loader?
Responder
Vinícius Thiengo (2) (0)
13/12/2014
Fala Ronnie, blz?
Eu recomendo ir de UIL se vc não for excepcional para implementar seu próprio cache no ImageLoader do Volley, mesmo se for ainda ficaria com o UIL. Abraço
Responder
13/12/2014
rs .. ok. Iniciarei pelo UIL. Valeu mesmo.
Responder