Sobes.tech
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.