Sobes.tech
Junior

Androidda DataStore Preferences bilan ishladizmi?

sobes.tech AI

AIdan javob

Ha, ishlaganman.

DataStore Preferences — bu AndroidX DataStore tarkibiga kiradigan, SharedPreferences ning asinxron analogidir. U KSP yordamida Kotlin Flow yoki RxJava3 ustida oddiy kalit-qiymat juftlarini xavfsiz saqlash imkonini beradi va Protobuf/Proto DataStore yoki Proto DataStore yordamida ma'lumot turlarini saqlash imkonini beradi.

DataStore Preferences ning SharedPreferences bilan taqqoslaganda asosiy afzalliklari:

  • Asinxronlik: Flow yoki RxJava3 bilan ishlaydi, bu esa asosiy oqimni bloklamaslikni ta'minlaydi va ANR muammolarini oldini oladi.
  • Xavfsizlik: Atomik o'qish/yazish operatsiyalari ma'lumotlarning konsistensiyasini kafolatlaydi.
  • Turlar xavfsizligi: Protobuf DataStore bilan ma'lumotlar sxemasini aniqlash mumkin, bu turlar bilan ishlashda xatoliklarni oldini oladi.
  • Reaktivlik: Ma'lumotlardagi o'zgarishlarni real vaqt rejimida kuzatish imkonini beradi.

Kotlin Flow bilan DataStore Preferences dan foydalanish misoli:

// DataStore yaratish
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

// Ma'lumotlarni o'qish
suspend fun readString(context: Context, key: String): String? {
    val preferencesKey = stringPreferencesKey(key)
    val preferences = context.dataStore.data.first()
    return preferences[preferencesKey]
}

// Ma'lumotlarni yozish
suspend fun writeString(context: Context, key: String, value: String) {
    val preferencesKey = stringPreferencesKey(key)
    context.dataStore.edit { settings ->
        settings[preferencesKey] = value
    }
}

KSP yordamida turlar xavfsiz kirishga misol:

// build.gradle (:app) faylida plugin qo'shing
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Misol uchun versiya, hozirgi versiyani tekshiring
}

// build.gradle (:app) faylida bog'liqliklar qo'shing
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Hozirgi versiyani tekshiring
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Hozirgi versiyani tekshiring
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Hozirgi versiyani tekshiring
}

// KSP uchun interfeysni aniqlash
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// KSP yordamida implementatsiya yaratish
// Bu SettingsPrefImpl turidagi sinfni yaratadi, uni ma'lumotlarga kirish uchun ishlatish mumkin

DataStore Preferences Androidda oddiy sozlamalar va ma'lumotlarni saqlash uchun tavsiya etilgan usul bo'lib, eskirgan SharedPreferences o'rnini bosadi.