2013-06-05 13 views
8

Utilizzo Universal Image Loader per visualizzare le immagini nella mia app in visualizzazioni di elenco. Sto usando UnlimitedDiscCache poiché questo è il meccanismo di cache più veloce secondo la documentazione.Caricatore di immagini universale - svuota la cache manualmente

Tuttavia, vorrei cancellare la cache del disco quando la mia app è chiusa (ad esempio in onStop()) ma solo i file della cache più vecchi che superano un determinato limite dovrebbero essere cancellati (come fa TotalSizeLimitedDiscCache).

Sono consapevole del ImageLoader.clearDiscCache() ma nel mio caso questo cancella la cache completa dal momento che sto usando UnlimitedDiscCache prima ...

quindi mi piacerebbe avere il meccanismo di cache più veloce quando l'utente è carico e lo scorrimento dei listviews e fai in modo che la cache lenta venga cancellata quando l'utente non interagisce più con l'app.

Qualche idea su come posso raggiungere questo obiettivo?

+0

Non è possibile garantire che l'applicazione si fermi quando viene chiamato 'onStop()'. Questo dice solo che l'attività attuale viene interrotta. La perdita di prestazioni è minima rispetto al tempo impiegato per implementare un altro meccanismo di memorizzazione nella cache (che può comunque rallentare l'app). –

+0

@jeff_bordon Avete qualche codice che viene utilizzato per costruire l'istanza ImageLoader? @Androidy Sì, puoi differenziare quando l'app sta per finire, come 'if (isFinishing()) {fare qualcosa}' –

+0

@jeff_bordon puoi avere BoB (il meglio di entrambi). Vedere la fonte qui https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/com/nostra13/universalimageloader/cache/disc/impl/LimitedAgeDiscCache.java Scrittura UnlimitedAgeDiskCache essere piuttosto semplice. Tutto quello che devi sapere è la data e la differenza tra ora e poi. Penso che non diminuirà la velocità di ListViews se è questione di pochi se. –

risposta

1

controllo questo da qui https://stackoverflow.com/a/7763725/1023248 può aiutare ..

@Override 
protected void onDestroy() { 
// closing Entire Application 
android.os.Process.killProcess(android.os.Process.myPid()); 
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit(); 
editor.clear(); 
editor.commit(); 
trimCache(this); 
super.onDestroy(); 
} 


public static void trimCache(Context context) { 
try { 
    File dir = context.getCacheDir(); 
    if (dir != null && dir.isDirectory()) { 
     deleteDir(dir); 

    } 
} catch (Exception e) { 
    // TODO: handle exception 
} 
} 


public static boolean deleteDir(File dir) { 
if (dir != null && dir.isDirectory()) { 
    String[] children = dir.list(); 
    for (int i = 0; i < children.length; i++) { 
     boolean success = deleteDir(new File(dir, children[i])); 
     if (!success) { 
      return false; 
     } 
    } 
} 

// <uses-permission 
// android:name="android.permission.CLEAR_APP_CACHE"></uses-permission> 
// The directory is now empty so delete it 

return dir.delete(); 
} 
0

Se si vuole cancellare la cache della memoria, è possibile utilizzare il seguente codice:

MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache()); 

Se anche voi volete per cancellare la cache nel disco, è possibile utilizzare il seguente codice:

DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache()); 

Questo è un modo molto più semplice o f svuotare la cache. È possibile trovare le risposte simili in questa discussione:

How to force a cache clearing using Universal Image Loader Android?

Spero che questa informazione è stata utile. :)

Problemi correlati