Как автоматически очистить кеш-память?

Например, я хочу очистить очередь запросов каждые 30 минут.

Итак, каков наилучший способ очистки кэша волейбола?

Переопределить методы, расширяя класс кэша волейбола?

Или создать таймер, который будет очищать кеш каждый раз, когда мне нужно?

Solutions Collecting From Web of "Как автоматически очистить кеш-память?"

Google Volley предоставляет два способа очистки элемента из кэша:

AppController.getInstance().getRequestQueue().getCache().remove(key); 

а также

 AppController.getInstance().getRequestQueue().getCache().invalidate(key, fullExpire); 

Удалить означает, что вы удаляете фактические кешированные данные.

Invalidate означает, что вы просто отмечаете данные как недействительные. Таким образом, волейбол будет проверять с сервером, сохраняются ли данные. Полный срок действия определяет, следует ли использовать данные до того, как залп подтвердит его с сервером.

Чтобы очистить кеш за каждые 30 минут, используйте ниже код:

Вы можете использовать serverDate от volley, чтобы получить дату, когда ответ был первоначально получен как

 AppController.getInstance().getRequestQueue().getCache().get(url).serverDate 

Поэтому в вашем коде используйте функцию getMinutesDifference как

  public static long getMinutesDifference(long timeStart,long timeStop){ long diff = timeStop - timeStart; long diffMinutes = diff / (60 * 1000); return diffMinutes; } 

И Вызовите эту функцию в своем коде как

 Calendar calendar = Calendar.getInstance(); long serverDate = AppController.getInstance().getRequestQueue().getCache().get(url).serverDate; if(getMinutesDifference(serverDate, calendar.getTimeInMillis()) >=30){ AppController.getInstance().getRequestQueue().getCache().invalidate(url, true); } 

Это приведет к аннулированию кеша, если предыдущий ответ URL = 30 минут.

Я пытался удалить растровое изображение из кеша с помощью remove(key) но он не работал, поэтому я проверил url, полученный putBitmap(String url, Bitmap bitmap) . Я нашел url имеет некоторый префикс, как #W0#H#S7http... это потому, что волейбол вызывает getCacheKey(String url, int maxWidth, int maxHeight, ScaleType scaleType) для каждого URL- getCacheKey(String url, int maxWidth, int maxHeight, ScaleType scaleType) . SO, если вы хотите удалить url из кеша, вам также нужно вызвать эту функцию для получения ключа для URL-адреса.

  String key = mImageLoader.getCacheKey(url, 0, 0, ImageView.ScaleType.CENTER_INSIDE); mRequestQueue.getCache().remove(key); 

Передайте 0,0 and ImageView.ScaleType.CENTER_INSIDE если вы используете imageLoader.get(String requestUrl,ImageLoader.ImageListener listener) иначе передайте минимальную высоту и ширину и тип масштаба, который вы используете.

ПРИМЕЧАНИЕ getCacheKey() является частной функцией класса ImageLoader, поэтому вам нужно изменить ее на общедоступную для ее использования внутри вашего приложения.