Die Reihenfolge der Suchbilder in Picasso lautet: Speichercache -> Festplattencache -> Netzwerk
Es gibt also nur wenige Szenarien, in denen der Cache in Picasso ungültig gemacht werden muss:
1. Ungültigen Speichercache:
- Usercase: Wenn das Image bereits im Festplatten-Cache oder auf dem Remote-Host aktualisiert wurde
Lösung: Löschen Sie den Cache von URL, Datei und Uri, falls vorhanden
mPicasso.with(appContext).invalidate(File);
mPicasso.with(appContext).invalidate(Url);
mPicasso.with(appContext).invalidate(Uri);
.
2. Ungültiger Speichercache und Festplattencache online
※ Hinweis: Online- Mittelaktualisierung direkt auf ImageView
Benutzerfall: Image auf Remote-Host aktualisiert
Lösung: Brechen Sie das Image im Speicher- und Festplatten-Cache ab und fordern Sie das Image auf dem Remote-Host an
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE )
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
-> Speicher- und Festplatten-Cache abbrechen
.
3. Ungültigen Speicher-Cache und Festplatten-Cache offline
※ Hinweis: Offline bedeutet Update nicht auf ImageView aktualisieren, sondern nur Hintergrundabruf zur späteren Verwendung
※ Hinweis: Die Verwendung von fetch () ist gut, verbraucht aber auch Netzwerkressourcen. Überlegen Sie daher sorgfältig, ob Sie Szenario 4 unten auf eine bessere Lösung überprüfen
4. Ungültigen Speichercache und Festplattencache Offline, wenn Festplattencache vorhanden ist
- Benutzerfall: Cache nur ungültig machen, wenn er bereits im Festplatten-Cache vorhanden ist
Lösung: Sollte die Festplatte vor dem Abrufen mit dem Parameter: NetworkPolicy.OFFLINE-Cache überprüfen
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.OFFLINE)
.fetch(new Callback() {
@Override
public void onSuccess() {
picasso.load(url).fetch();
}
@Override
public void onError() {
}
});
Picasso ist eine erstaunliche Bibliothek. Ich hoffe, Squareup wird in der kommenden Zukunft mehr Komfort-API für die Verwaltung des Cache hinzufügen.
Picasso.with(getActivity()).invalidate(file);
wie kann ich wieder zwischenspeichern?