Sobes.tech
Junior

Dolgozott már DataStore Preferences-szel Androidon?

sobes.tech MI

Válasz az MI-től

Igen, dolgoztam.

A DataStore Preferences az aszinkron megfelelője a SharedPreferences-nek, amely az AndroidX DataStore része. Biztonságosan tárolhat egyszerű kulcs-érték párokat, KSP-t használva Kotlin Flow vagy RxJava3 felett az aszinkron munkához, és Protobuf/Proto DataStore vagy Proto DataStore segítségével az adat típusokhoz.

A DataStore Preferences fő előnyei a SharedPreferences-hez képest:

  • Aszinkronitás: Flow vagy RxJava3 használatával működik, megakadályozva a fő szál blokkolását és elkerülve az ANR problémákat.
  • Biztonság: Atomikus olvasási/írási műveletek garantálják az adatok konzisztenciáját.
  • Típusbiztonság: A Protobuf DataStore segítségével adat sémát lehet definiálni, elkerülve a típusokkal kapcsolatos hibákat.
  • Reaktivitás: Lehetővé teszi az adatok változásainak valós idejű figyelését.

Példa a DataStore Preferences Kotlin Flow-val való használatára:

// DataStore létrehozása
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

// Adatok olvasása
suspend fun readString(context: Context, key: String): String? {
    val preferencesKey = stringPreferencesKey(key)
    val preferences = context.dataStore.data.first()
    return preferences[preferencesKey]
}

// Adatok írása
suspend fun writeString(context: Context, key: String, value: String) {
    val preferencesKey = stringPreferencesKey(key)
    context.dataStore.edit { settings ->
        settings[preferencesKey] = value
    }
}

Példa a típusbiztonságos hozzáférés KSP-vel:

// build.gradle (:app) fájlban adj hozzá a plugint
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Például verzió, ellenőrizd a legfrissebbet
}

// build.gradle (:app) fájlban adj hozzá függőségeket
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Ellenőrizd a legfrissebbet
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Ellenőrizd a legfrissebbet
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Ellenőrizd a legfrissebbet
}

// KSP interfész definiálása
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Implementáció generálása KSP-vel
// Létrehoz egy SettingsPrefImpl típusú osztályt, amit az adatok elérésére lehet használni

A DataStore Preferences az ajánlott módszer az egyszerű beállítások és adatok tárolására Androidon, a régi SharedPreferences helyett.