Junior
Да ли сте радили са DataStore Preferences у Android-у?
sobes.tech АИ
Одговор од АИ
Да, радио сам.
DataStore Preferences је асинхрони аналог SharedPreferences, који је део AndroidX DataStore. Он омогућава безбедно чување једноставних парова кључ-вредност, користећи KSP на Kotlin Flow или RxJava3 за асинхроно рад и Protobuf/Proto DataStore или Proto DataStore за типове података.
Главне предности DataStore Preferences у поређењу са SharedPreferences:
- Асинхроност: Ради уз употребу Flow или RxJava3, што спречава блокирање главног тока и елиминише проблеме са ANR.
- Безбедност: Атомарне операције читања/писања гарантују конзистентност података.
- Типска безбедност: Са Protobuf DataStore-ом можете дефинисати шему података, што елиминише грешке при раду са типовима.
- Реактивност: Омогућава праћење промена података у реалном времену.
Пример коришћења DataStore Preferences са Kotlin Flow:
// Креирање DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
// Читање података
suspend fun readString(context: Context, key: String): String? {
val preferencesKey = stringPreferencesKey(key)
val preferences = context.dataStore.data.first()
return preferences[preferencesKey]
}
// Писање података
suspend fun writeString(context: Context, key: String, value: String) {
val preferencesKey = stringPreferencesKey(key)
context.dataStore.edit { settings ->
settings[preferencesKey] = value
}
}
Пример коришћења KSP за креирање типске безбедности:
// У build.gradle (:app) додајте плагин
plugins {
...
id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Пример верзије, проверите актуелну
}
// У build.gradle (:app) додајте зависности
dependencies {
...
implementation("androidx.datastore:datastore-preferences:1.0.0") // Проверите актуелну верзију
implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Проверите актуелну верзију
ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Проверите актуелну верзију
}
// Дефинисање интерфејса за KSP
interface SettingsPref {
val appName: String
val isNotificationsEnabled: Boolean
val theme: Int
}
// Генерисање реализације помоћу KSP
// Ово ће створити класу типа SettingsPrefImpl, коју можете користити за приступ подацима
DataStore Preferences је препоручени начин за чување једноставних подешавања и података у Android-у, замењујући застарели SharedPreferences.