Xamarin.Forms
Caching
Suche…
Caching mit Akavache
Über Akavache
Akavache ist eine unglaublich nützliche Bibliothek, die Reichweitenfunktionen zum Zwischenspeichern Ihrer Daten bietet. Akavache bietet eine Speicherschnittstelle mit Schlüsselwerten und arbeitet auf der Oberseite von SQLite3. Sie müssen Ihr Schema nicht synchron halten, da es sich um eine No-SQL-Lösung handelt, die es ideal für die meisten mobilen Anwendungen macht, insbesondere wenn Ihre App häufig ohne Datenverlust aktualisiert werden muss.
Empfehlungen für Xamarin
Akavache ist definitiv die beste Caching-Bibliothek für Xamarin-Anwendungen, wenn Sie nicht mit stark relativen Daten, binären oder wirklich großen Datenmengen arbeiten müssen. Verwenden Sie Akavache in den folgenden Fällen:
- Sie benötigen Ihre App, um die Daten für einen bestimmten Zeitraum zwischenzuspeichern (Sie können ein Ablaufzeitlimit für jede zu speichernde Entität konfigurieren.
- Sie möchten, dass Ihre App offline arbeitet.
- Es ist schwierig, das Schema Ihrer Daten zu ermitteln und einzufrieren. Beispielsweise haben Sie Listen mit verschiedenen typisierten Objekten.
- Es genügt für Sie, über einen einfachen Schlüsselwertzugriff auf die Daten zu verfügen, und Sie müssen keine komplexen Abfragen durchführen.
Akavache ist keine "Wunderwaffe" für die Datenspeicherung. Überlegen Sie in den folgenden Fällen zweimal, wie Sie es verwenden können:
- Ihre Datenentitäten haben viele Beziehungen zueinander.
- Sie brauchen Ihre App nicht wirklich, um offline zu arbeiten.
- Sie haben eine riesige Menge an Daten, die lokal gespeichert werden müssen.
- Sie müssen Ihre Daten von Version zu Version migrieren.
- Sie müssen komplexe SQL-typische Abfragen ausführen, z. B. Gruppierung, Projektionen usw.
Tatsächlich können Sie Ihre Daten manuell migrieren, indem Sie sie mit aktualisierten Feldern lesen und zurückschreiben.
Einfaches Beispiel
Die Interaktion mit Akavache erfolgt hauptsächlich über ein Objekt namens BlobCache
.
Die meisten Methoden von Akavache liefern reaktive Observable, die Sie aber dank Erweiterungsmethoden auch erwarten können.
using System.Reactive.Linq; // IMPORTANT - this makes await work!
// Make sure you set the application name before doing any inserts or gets
BlobCache.ApplicationName = "AkavacheExperiment";
var myToaster = new Toaster();
await BlobCache.UserAccount.InsertObject("toaster", myToaster);
//
// ...later, in another part of town...
//
// Using async/await
var toaster = await BlobCache.UserAccount.GetObject<Toaster>("toaster");
// or without async/await
Toaster toaster;
BlobCache.UserAccount.GetObject<Toaster>("toaster")
.Subscribe(x => toaster = x, ex => Console.WriteLine("No Key!"));
Fehlerbehandlung
Toaster toaster;
try {
toaster = await BlobCache.UserAccount.GetObjectAsync("toaster");
} catch (KeyNotFoundException ex) {
toaster = new Toaster();
}
// Or without async/await:
toaster = await BlobCache.UserAccount.GetObjectAsync<Toaster>("toaster")
.Catch(Observable.Return(new Toaster()));