Middle
Kuidas rakendada andmete vahemälu mehhanismi Androidi rakenduses?
sobes.tech AI
Vastus AI-lt
Androidi vahemälusüsteemi saab rakendada mitmel viisil, valides sobiva vastavalt andmetüübile ja nende elutsüklile.
Peamised lähenemised:
- Sisemälu (Internal Storage): Sobib tundlike andmete jaoks, mis on saadaval ainult rakendusele. Andmed salvestatakse rakendusele privaatse kataloogi.
- Välisvähemälu (External Storage): Kasutatakse vähem tundlike andmete jaoks, mida võivad lugeda teised rakendused või kasutaja. Nõuab luba.
- Jagatud eelistused (Shared Preferences): Ideaalne väikese koguse lihtsate andmete "võti-väärtus" salvestamiseks, näiteks rakenduse seaded.
- SQLite andmebaasid: Võimas lahendus struktureeritud andmete jaoks, võimaldades teha keerukaid päringuid. Android toetab sisseehitatud SQLite-i.
- Vahemälukataloog: Spetsiaalselt mõeldud ajutiste andmete jaoks. Süsteem võib need failid kustutada, kui on vaja vaba ruumi.
Näide sisemise salvestusruumi kasutamisest vahemälu jaoks:
// Vahemälufaili saamine
val cacheFile = File(context.cacheDir, "my_cached_data.txt")
// Andmete kirjutamine vahemällu
try {
FileOutputStream(cacheFile).use { fos ->
fos.write("Vahemälu andmed".toByteArray())
}
} catch (e: IOException) {
// Vea töötlemine
}
// Andmete lugemine vahemälust
try {
FileInputStream(cacheFile).use { fis ->
val data = fis.readBytes().toString(Charsets.UTF_8)
// Vahemälus olevate andmete kasutamine
}
} catch (e: IOException) {
// Vea töötlemine, võib-olla vahemälu on tühi või kättesaamatu
}
// Vahemälufaili kustutamine
cacheFile.delete()
Shared Preferences näide:
// Shared Preferences eksemplari saamine
val sharedPref = context.getSharedPreferences("my_cache_prefs", Context.MODE_PRIVATE)
// Andmete salvestamine
with(sharedPref.edit()) {
putString("cached_key", "cached_value")
apply()
}
// Andmete lugemine
val cachedValue = sharedPref.getString("cached_key", null)
// Andmete kasutamine
// Andmete kustutamine
with(sharedPref.edit()) {
remove("cached_key")
apply()
}
Sageli kasutatakse raamatukogusid nagu Room, mis on Android Architecture Components osa, et töötada SQLite-iga.
// Näide Roomi kasutamisest: entiteedi määratlemine
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val age: Int?
)
Käivitamise strateegiad:
- Cache-Aside: Rakendus kontrollib esmalt vahemälu. Kui andmed on olemas, kasutatakse neid. Kui ei, laaditakse andmed allikast (nt võrgust) ja salvestatakse vahemällu tulevaste päringute jaoks.
- Read-Through: Raamatukogu või raamistik (nt OkHttp võrgupäringute jaoks) haldab automaatselt vahemälu. Päringu ajal kontrollib raamatukogu vahemälu, ja kui andmed puuduvad või on vananenud, laadib need allikast ja uuendab vahemälu.
- Write-Through: Andmed kirjutatakse esmalt vahemällu, seejärel samaaegselt põhiallika (nt andmebaasi) juurde.
- Write-Back: Andmed kirjutatakse esmalt ainult vahemällu. Muudatused sünkroniseeritakse hiljem põhiallika (nt andmebaasi) juurde, võib-olla vahemälu täitmise või ajastatud ajal.
Andmete värskuse, jõudluse ja salvestatava andmekoguse nõuete põhjal valitakse strateegia ja meetod. Samuti on oluline arvestada TTL-i (Time To Live) kešitud andmetega, et tagada nende ajakohasus.