2013-06-05 3 views
8

Я использую Universal Image Loader для отображения изображений в моем приложении в списках просмотров. Я использую UnlimitedDiscCache, поскольку это самый быстрый механизм кэширования в соответствии с документацией.Универсальный загрузчик изображений - очистить кеш вручную

Однако, я хотел бы очистить кеш диска, когда мое приложение закрыто (например, в onStop()), но только самые старые кешированные файлы, превышающие заданный лимит, должны быть удалены (например, TotalSizeLimitedDiscCache).

Я знаю ImageLoader.clearDiscCache(), но в моем случае это очищает весь кэш, так как я использую UnlimitedDiscCache раньше ...

Так что я хотел бы иметь самый быстрый механизм кэширования, когда пользователь загружает и прокрутку ListViews и очистить медленный кеш, когда пользователь больше не взаимодействует с приложением.

Любые идеи, как я могу это достичь?

+0

Вы не можете гарантировать, что приложение останавливается при вызове 'onStop()'. Это говорит только о том, что текущая деятельность прекращается. Потери производительности очень минимальны по сравнению с временем, затрачиваемым на реализацию другого механизма кэширования (что может замедлить приложение в любом случае). –

+0

@jeff_bordon У вас есть код, который используется для создания экземпляра ImageLoader? @Androidy Да, вы можете отличить, когда приложение вот-вот закончится, например 'if (isFinishing()) {сделайте что-нибудь}' –

+0

@jeff_bordon, у вас может быть BoB (лучше всего того и другого). См. Источник здесь https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/com/nostra13/universalimageloader/cache/disc/impl/LimitedAgeDiscCache.java Написание UnlimitedAgeDiskCache будет быть довольно прямолинейным. Все, что вам нужно знать, это дата и разница между временем и потом. Я думаю, что это не уменьшит скорость ListViews, если дело мало. –

ответ

1

проверить это здесь https://stackoverflow.com/a/7763725/1023248 может помочь вам ..

@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

Если вы хотите, чтобы очистить кэш из памяти, вы можете использовать следующий код:

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

Если вы хотите чтобы очистить кэш на диске, вы можете использовать следующий код:

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

Это намного проще. f очистка кеша. Вы можете найти похожие ответы в этой теме:

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

Я надеюсь, что эта информация была полезной. :)

Смежные вопросы