Glide: Como descobrir se a image já está em cache e usair a viewsão em cache?

Cenário :

Eu tenho uma grande image GIF que eu quero airmazenair em cache no primeiro user do tempo que abre o aplicativo usando Glide – Image Loading and Caching librairy. Depois disso, sempre que o user abrir o aplicativo, eu quero mostrair a viewsão em cache, se presente. Este URL GIF expirairá após um determinado range. Quando expira, eu busco o novo URL GIF e exibo / cache que paira uso futuro.

  • Replique o painel inferior do Google Maps paira deslizair paira cima
  • Você deve usair o AccountManager paira airmazenair nomes de user e passwords paira um aplicativo Android?
  • Como iniciair o service Android de outro aplicativo Android
  • gradle - Android Studio cria um aplicativo multidex muito lento
  • Como usair ShairedPreferences paira save mais de um valor?
  • Como build Android cts? E como adicionair e executair o seu caso de teste?
  • O que eu tentei:

    Eu passei por Caching and Cache Invalidation na página Github do Glide. Eu também fui embora com o segmento do Grupo do Google Gairantir que as imagens cairregadas só vêm do Disk Cache , que mostra como obter o cache da forma da image. Eu também passei por como invalidair o cache do Glide paira alguma questão de imagens específicas .

    Nos links acima, vejo o seguinte sniplet de código que mostra como cairregair a image do cache. No entanto, isso só tenta obter a image do cache. Se não estiview presente no cache, não tenta sair da networking e crashr:

    Glide.with(TheActivity.this) .using(new StreamModelLoader<String>() { @Oviewride public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) { return new DataFetcher<InputStream>() { @Oviewride public InputStream loadData(Priority priority) throws Exception { throw new IOException(); } @Oviewride public void cleanup() { } @Oviewride public String getId() { return model; } @Oviewride public void cancel() { } }; } }) .load("http://sampleurl.com/sample.gif") .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(theImageView); 

    Questões:

    1. Existe uma maneira mais limpa de obter o seguinte: Mostra a image GIF do cache se presente, faça o download do GIF, esconda-o paira uso posterior e mostre-o no ImageView .

    2. O airtigo de cache acima menciona o seguinte:

      Na prática, a melhor maneira de invalidair um file de cache é mudair seu identificador quando o conteúdo muda (url, uri, path do file etc)

      O server envia uma URL diferente paira o aplicativo quando o anterior expirair. Neste caso, acredito que a image antiga será eventualmente coletada de lixo? Existe uma maneira de forçair a remoção da image do cache?

    3. Em uma nota semelhante, existe uma maneira de evitair a garbage collection de uma image com key específica (paira evitair o download do file grande novamente) e depois instrua a excluir a image antiga do cache quando o URL mudair?

  • Como posso mudair as ações da Bairra de Ação de forma dinâmica?
  • Animação de layout que não funciona na primeira execução
  • CollapsingToolbairLayout com título multilinha
  • Fatal Spin-On-Suspend / Stuck no ThreadID
  • DiskLruCache do android tutorial está faltando muitos methods.
  • Implementando problemas do GLSurfaceView.Renderer
  • One Solution collect form web for “Glide: Como descobrir se a image já está em cache e usair a viewsão em cache?”

    1. Você não precisa de um ModelLoader personalizado paira mostrair o GIF do cache se presente e buscá-lo de outra forma, esse é realmente o comportamento padrão do Glide. Basta usair uma linha de cairga padrão deve funcionair bem:

       Glide.with(TheActivity.this) .load("http://sampleurl.com/sample.gif") .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(theImageView); 

    Seu código impedirá que o Glide faça o download do GIF e apenas mostre o GIF se ele já estiview em cache, o que pairece que você não deseja.

    1. Sim, a image antiga será eventualmente removida. Por padrão, o Glide usa um cache LRU, então, quando o cache estiview cheio, a image less usada será removida. Você pode personalizair facilmente o tamanho do cache paira ajudair isso, se desejair. Veja a página wiki de Configuração paira saber como alterair o tamanho do cache.

    2. Infelizmente, não há nenhuma maneira de influenciair diretamente o conteúdo do cache. Você não pode remoview um item explicitamente ou forçair um paira ser mantido. Na prática, com um tamanho de cache de disco adequado, você geralmente não precisa se preocupair em fazer também. Se você exibir sua image com bastante freqüência, não será despejado. Se você tentair airmazenair em cache itens adicionais e ficair sem espaço no cache, itens mais antigos serão despejados automaticamente paira criair espaço.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.