2014-06-25 25 views
10

Badałem Picaso, pobieranie obrazów i bibliotekę buforowania dla Androida. I dowiedziałem się, że ich mechanizm buforowania oparty jest na Androidzie HttpResponseCache. Dokumentacja mówi:Jak działa pamięć podręczna HTTP HTTP?

Aby zmierzyć skuteczność cache ta klasa tory trzy statystyki:

  • żądania Count: liczbę żądań HTTP wydanych ponieważ cache został stworzony.
  • Liczba sieci: liczba żądań, które wymagały użycia sieci.
  • Liczba trafień: liczba żądań, których odpowiedzi były obsługiwane przez pamięć podręczną.

Jak działa pamięć podręczna HTTP Http?

  • W jaki sposób system Android zna pamięć podręczną lub nie buforuje pliku i jak długo?
  • Kiedy dokładnie pamięć podręczna została wyczyszczona i przez kogo?
  • Jak mogę przesłonić domyślny mechanizm buforowania http moim własnym? A czy powinienem?

Odpowiedz

10

Odpowiedzi są poniżej.

1) Jak system Android wie, czy buforować plik w pamięci podręcznej, czy nie, i jak długo?

W HttpResponseCache buforuje HTTP lub HTTPS odpowiedź, jeśli wszystkie prawdziwe są następujące

  • Został on zainstalowany poprzez HttpResponseCache.install()

  • setUseCaches(true) nazwano na HttpURLConnection lub HttpsURLConnection

  • Nagłówki zwrócone przez serwer HTTP/HTTPS umożliwiają buforowanie. Zobacz ResponseHeaders.isCacheable()implementation, aby uzyskać szczegółowe informacje.

Pamięć podręczna wykorzystuje strategię LRU zastępującą starsze buforowane odpowiedzi nowszymi, aby upewnić się, że nie przekracza ona przydzielonego rozmiaru dysku.

2) Kiedy dokładnie wyczyści się pamięć podręczną i kto?

Jeśli pamięć podręczna jest inicjowana z katalogu w Context.getCacheDir() lub Context.getExternalCacheDir(), pliki są zwykle usuwane po odinstalowaniu aplikacji. Pamięć podręczna może zostać usunięta ręcznie, dzwoniąc pod numer HttpResponseCache.delete()

3) Jak mogę przesłonić domyślny mechanizm buforowania http moim własnym? A czy powinienem?

Zobacz HttpResponseCache.install(). Jeśli twoja aplikacja ładuje zasoby buforowane przez HTTP lub HTTPS i nie ma własnej warstwy pamięci podręcznej, powinieneś rozważyć jej użycie.Domyślna implementacja Android HttpResponseCache powinna działać dobrze.

Należy pamiętać, że domyślnie nie jest używana pamięć podręczna. Musisz zainstalować jeden z HttpResponseCache.install().

+0

I Picasso ustawia domyślny cache tutaj https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/UrlConnectionDownloader.java#L96 – Prem

+0

Właściwie [HttpResponseCache. install] (http://developer.android.com/reference/android/net/http/HttpResponseCache.html#install%28java.io.File,%20long%29) nie mówi nic o tym, jak "przesłonić domyślny mechanizm buforowania http "(3). A może wskazałeś źródło? Zamiast tego wskażę [ResponseCache.setDefault] (http://developer.android.com/reference/java/net/ResponseCache.html#setDefault%28java.net.ResponseCache%29). –

+0

Jak mogę uzyskać wartość ETag z pamięci podręcznej? –