Junior
Czy pracowałeś z DataStore Preferences na Androidzie?
sobes.tech AI
Odpowiedź od AI
Tak, pracowałem.
Preferences DataStore to asynchroniczny odpowiednik SharedPreferences, zawarty w AndroidX DataStore. Umożliwia bezpieczne przechowywanie prostych par klucz-wartość, korzystając z KSP na Kotlin Flow lub RxJava3 do pracy asynchronicznej oraz Protobuf/Proto DataStore lub Proto DataStore dla typów danych.
Główne zalety Preferences DataStore w porównaniu do SharedPreferences:
- Asynchroniczność: Działa z użyciem Flow lub RxJava3, co zapobiega blokowaniu głównego wątku i wyklucza problemy z ANR.
- Bezpieczeństwo: Operacje odczytu/zapisu atomowe gwarantują spójność danych.
- Bezpieczeństwo typów: Z Protobuf DataStore można zdefiniować schemat danych, co wyklucza błędy przy pracy z typami.
- Reaktywność: Pozwala na obserwację zmian danych w czasie rzeczywistym.
Przykład użycia Preferences DataStore z Kotlin Flow:
// Tworzenie DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
// Odczyt danych
suspend fun readString(context: Context, key: String): String? {
val preferencesKey = stringPreferencesKey(key)
val preferences = context.dataStore.data.first()
return preferences[preferencesKey]
}
// Zapis danych
suspend fun writeString(context: Context, key: String, value: String) {
val preferencesKey = stringPreferencesKey(key)
context.dataStore.edit { settings ->
settings[preferencesKey] = value
}
}
Przykład użycia KSP do tworzenia bezpiecznego dostępu typu:
// W build.gradle (:app) dodaj wtyczkę
plugins {
...
id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Przykładowa wersja, sprawdź aktualną
}
// W build.gradle (:app) dodaj zależności
dependencies {
...
implementation("androidx.datastore:datastore-preferences:1.0.0") // Sprawdź aktualną wersję
implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Sprawdź aktualną wersję
ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Sprawdź aktualną wersję
}
// Definicja interfejsu dla KSP
interface SettingsPref {
val appName: String
val isNotificationsEnabled: Boolean
val theme: Int
}
// Generacja implementacji za pomocą KSP
// Utworzy klasę typu SettingsPrefImpl, którą można używać do dostępu do danych
DataStore Preferences jest zalecaną metodą przechowywania prostych ustawień i danych w Android, zastępując przestarzałe SharedPreferences.