Middle
Чӣ гуна механизмии кешгирии маълумотҳоро дар барномаи Android амалӣ кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Механизмии кешгироии дар Android метавонад бо роҳҳои гуногун амалӣ карда шавад, бо интихоби он ки беҳтарин мувофиқ аст, вобаста ба навъи маълумот ва давраи ҳаёти онҳо.
Равишҳои асосӣ:
- Захираҳои дохилӣ (Internal Storage): Барои маълумоти ҳассос, ки танҳо барои барнома дастрас аст, мувофиқ аст. Маълумот дар каталоге нигоҳ дошта мешавад, ки барои барнома хусусӣ аст.
- Захираҳои хориҷӣ (External Storage): Барои маълумоти камтар ҳассос истифода мешавад, ки метавонанд дигар барномаҳо ё корбарон хонда шаванд. Иҷозатҳоро талаб мекунад.
- Пешфарзҳои умумӣ (Shared Preferences): Барои нигоҳдории миқдори ками маълумоти оддӣ "калид-арзиш", мисли танзимоти барнома, беҳтарин аст.
- Маълумотхонаи SQLite: Ҳалли қавӣ барои маълумоти сохторӣ, имкон медиҳад, ки дархостҳои мураккаб иҷро шаванд. Android дастгирии встроишударо барои SQLite пешниҳод мекунад.
- Каталоги кеш: махсус барои маълумоти муваққатӣ пешбинӣ шудааст. Система метавонад ин файлҳоро тоза кунад, агар ҷойи холӣ кардан лозим бошад.
Масалан истифодаи захираҳои дохилӣ барои кешгироии маълумот:
// Дастрасӣ ба файлҳои кеш
val cacheFile = File(context.cacheDir, "my_cached_data.txt")
// Навиштани маълумот ба кеш
try {
FileOutputStream(cacheFile).use { fos ->
fos.write("Маълумоти кеш".toByteArray())
}
} catch (e: IOException) {
// Муҳокимаи хато
}
// Хондани маълумот аз кеш
try {
FileInputStream(cacheFile).use { fis ->
val data = fis.readBytes().toString(Charsets.UTF_8)
// Истифодаи маълумоти кешшуда
}
} catch (e: IOException) {
// Муҳокимаи хато, мумкин аст, кеш холӣ ё дастрас нест
}
// Баъд аз тоза кардани файл
cacheFile.delete()
Масалан истифодаи Shared Preferences:
// Дастрасӣ ба экземпляри Shared Preferences
val sharedPref = context.getSharedPreferences("my_cache_prefs", Context.MODE_PRIVATE)
// Навиштани маълумот
with(sharedPref.edit()) {
putString("cached_key", "cached_value")
apply()
}
// Хондани маълумот
val cachedValue = sharedPref.getString("cached_key", null)
// Истифодаи cachedValue
// Тоза кардани маълумот
with(sharedPref.edit()) {
remove("cached_key")
apply()
}
Барои кор бо SQLite, одатан китобхонаҳои Wrapper истифода мешаванд, масалан Room, ки қисми Android Architecture Components мебошад.
// Мисоли истифодаи Room: муайян кардани объект
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val age: Int?
)
Стратегияҳои кешгироии:
- Cache-Aside: Барнома аввал кешро месанҷад. Агар маълумот пайдо шавад, истифода мешавад. Агар не, маълумот аз манбаъ (масалан, шабака) бор карда мешавад ва сипас ба кеш ҷойгир карда мешавад барои истифодаи оянда.
- Read-Through: Китобхона ё фреймворк (масалан, OkHttp барои дархостҳои шабака) автоматӣ менежмантро барои кеш анҷом медиҳад. Дархост, китобхона кешро месанҷад, ва агар маълумот набошад ё кӯҳна бошад, онро аз манбаъ бор мекунад ва кешро нав мекунад.
- Write-Through: Маълумот аввал ба кеш навишта мешавад, ва сипас ҳамзамон ба манбаи асосӣ.
- Write-Back: Маълумот аввал танҳо ба кеш навишта мешавад. Тағйиротҳо баъдан ба манбаи асосӣ (масалан, базаи додаҳо) интиқол дода мешаванд, эҳтимолан ҳангоми пур кардани кеш ё дар асоси нақша.
Интихоби стратегия ва усули кешгироии бояд вобаста ба талаботҳо оид ба навсозии маълумот, иҷроиш ва ҳаҷми маълумотҳои нигоҳдошташуда бошад. Ҳамчунин муҳим аст, ки TTL (Time To Live) маълумоти кешшуда ба назар гирифта шавад, то ки онҳо нав бошанд.