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.