Xamarin.Forms
caching
Sök…
Cache med Akavache
Om Akavache
Akavache är ett otroligt användbart bibliotek som ger räckviddsfunktioner för att cache-lagra dina data. Akavache tillhandahåller ett nyckelvärde lagringsgränssnitt och fungerar på toppen av SQLite3. Du behöver inte hålla ditt schema synkroniserat eftersom det faktiskt är No-SQL-lösning vilket gör det perfekt för de flesta mobilapplikationer, särskilt om du behöver att din app ska uppdateras ofta utan dataförlust.
Rekommendationer för Xamarin
Akavache är definitivt det bästa cachebiblioteket för Xamarin-applikation om du bara inte behöver arbeta med starkt relativa data, binära eller riktigt stora datamängder. Använd Akavache i följande fall:
- Du behöver din app för att cachera informationen under en viss tidsperiod (du kan konfigurera utgångstid för varje enhet som sparas;
- Du vill att din app ska fungera offline;
- Det är svårt att fastställa och frysa schemat för dina data. Till exempel har du listor som innehåller olika typade objekt;
- Det räcker för dig att ha enkel nyckelvärdesåtkomst till dataen och du behöver inte göra komplexa frågor.
Akavache är inte en "silverkula" för datalagring så tänk två gånger på att använda den i följande fall:
- Dina dataenheter har många relationer mellan varandra;
- Du behöver verkligen inte din app för att fungera offline;
- Du har enorma mängder data som ska sparas lokalt;
- Du måste migrera dina data från version till version;
- Du måste utföra komplexa frågor typiska för SQL som gruppering, projektioner etc.
Egentligen kan du migrera dina data manuellt bara genom att läsa och skriva tillbaka dem med uppdaterade fält.
Enkelt exempel
Interaktion med Akavache görs främst genom ett objekt som heter BlobCache
.
De flesta av Akavaches metoder returnerar reaktiva observerbara, men du kan också bara vänta på dem tack vare förlängningsmetoder.
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!"));
Felhantering
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()));