Middle
Android ilovasida ma'lumotlarni kechiktirish mexanizmini qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
Androidda kesh mexanizmi turli usullarda amalga oshirilishi mumkin, ma'lumotlar turi va ularning hayot aylanishiga qarab eng mosini tanlash.
Asosiy yondashuvlar:
- Ichki saqlash (Internal Storage): Hissiyotli ma'lumotlar uchun mos, faqat ilova uchun kirish mumkin. Ma'lumotlar ilovaga xos bo'lgan katalogda saqlanadi.
- Tashqi saqlash (External Storage): Kamroq sezgir ma'lumotlar uchun ishlatiladi, ular boshqa ilovalar yoki foydalanuvchilar tomonidan o'qilishi mumkin. Ruxsatlar talab qilinadi.
- Ulashilgan sozlamalar (Shared Preferences): Kichik hajmdagi oddiy "kalit-qiymat" ma'lumotlarni, masalan, ilova sozlamalarini saqlash uchun ideal.
- SQLite ma'lumotlar bazalari: Tuzilgan ma'lumotlar uchun qudratli yechim, murakkab so'rovlarni bajarishga imkon beradi. Android SQLite uchun o'rnatilgan qo'llab-quvvatlashni taqdim etadi.
- Kesh papkasi: Maxsus vaqtinchalik ma'lumotlar uchun mo'ljallangan. Tizim bu fayllarni bo'sh joy bo'lsa, o'chirishi mumkin.
Ichki saqlashdan foydalanib kesh qilish misoli:
// Kesh faylini olish
val cacheFile = File(context.cacheDir, "my_cached_data.txt")
// Ma'lumotlarni keshga yozish
try {
FileOutputStream(cacheFile).use { fos ->
fos.write("Kesh uchun ma'lumotlar".toByteArray())
}
} catch (e: IOException) {
// Xatolikni boshqarish
}
// Keshdan ma'lumotlarni o'qish
try {
FileInputStream(cacheFile).use { fis ->
val data = fis.readBytes().toString(Charsets.UTF_8)
// Kesh ma'lumotlaridan foydalanish
}
} catch (e: IOException) {
// Xatolikni boshqarish, ehtimol kesh bo'sh yoki kirish mumkin emas
}
// Kesh faylini o'chirish
cacheFile.delete()
Shared Preferencesdan foydalanish misoli:
// Shared Preferences nusxasini olish
val sharedPref = context.getSharedPreferences("my_cache_prefs", Context.MODE_PRIVATE)
// Ma'lumotlarni yozish
with(sharedPref.edit()) {
putString("cached_key", "cached_value")
apply()
}
// Ma'lumotlarni o'qish
val cachedValue = sharedPref.getString("cached_key", null)
// cachedValue dan foydalanish
// Ma'lumotlarni o'chirish
with(sharedPref.edit()) {
remove("cached_key")
apply()
}
SQLite bilan ishlash uchun ko'pincha Room kabi qoplama kutubxonalar ishlatiladi, ular Android Arxitektura Komponentlarining bir qismidir.
// Roomdan foydalanish misoli: entitiyni aniqlash
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val age: Int?
)
Kesh strategiyalari:
- Cache-Aside: Ilova avvalo keshni tekshiradi. Agar ma'lumotlar topilsa, ular ishlatiladi. Agar topilmasa, ma'lumotlar manbadan (masalan, tarmoq) yuklanadi va kelajakdagi so'rovlar uchun keshga joylashtiriladi.
- Read-Through: Kutubxona yoki framework (masalan, OkHttp tarmoq so'rovlar uchun) avtomatik ravishda keshni boshqaradi. Ma'lumotlar so'rov qilinayotganda, kutubxona keshni tekshiradi, va agar ma'lumotlar yo'q yoki eskirgan bo'lsa, ularni manbadan yuklab, keshni yangilaydi.
- Write-Through: Ma'lumotlar avvalo keshga yoziladi, so'ngra bir vaqtning o'zida asosiy manbaga yoziladi.
- Write-Back: Ma'lumotlar avvalo faqat keshga yoziladi. O'zgarishlar keyinchalik asosiy manbaga (masalan, ma'lumotlar bazasi) o'tkaziladi, ehtimol, kesh to'ldirilganda yoki jadvalga asoslangan holda.
Strategiya va kesh usulini tanlash, ma'lumotlarning yangiligi talablari, ishlash tezligi va saqlanadigan ma'lumotlar hajmiga bog'liq. Shuningdek, keshdagi ma'lumotlarning yangiligi uchun TTL (Time To Live) ni hisobga olish muhimdir.