Sobes.tech
Junior

Pracovali ste s DataStore Preferences v Android?

sobes.tech AI

Odpoveď od AI

Áno, pracoval.

DataStore Preferences je asynchrónny ekvivalent SharedPreferences, ktorý je súčasťou AndroidX DataStore. Umožňuje bezpečne ukladať jednoduché páry kľúč-hodnota pomocou KSP nad Kotlin Flow alebo RxJava3 pre asynchrónnu prácu a Protobuf/Proto DataStore alebo Proto DataStore pre typy dát.

Hlavné výhody DataStore Preferences v porovnaní so SharedPreferences:

  • Asynchrónnosť: Funguje s použitím Flow alebo RxJava3, čo zabraňuje blokovaniu hlavného vlákna a eliminuje problémy s ANR.
  • Bezpečnosť: Atómové operácie čítania/zápisu zaručujú konzistenciu dát.
  • Typová bezpečnosť: S Protobuf DataStore môžete definovať schému dát, čo eliminuje chyby pri práci s typmi.
  • Reaktivita: Umožňuje sledovať zmeny dát v reálnom čase.

Príklad použitia DataStore Preferences s Kotlin Flow:

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

// Čítanie dát
suspend fun readString(context: Context, key: String): String? {
    val preferencesKey = stringPreferencesKey(key)
    val preferences = context.dataStore.data.first()
    return preferences[preferencesKey]
}

// Zápis dát
suspend fun writeString(context: Context, key: String, value: String) {
    val preferencesKey = stringPreferencesKey(key)
    context.dataStore.edit { settings ->
        settings[preferencesKey] = value
    }
}

Príklad použitia KSP na vytvorenie typovej bezpečnosti:

// V build.gradle (:app) pridajte plugin
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Príklad verzia, skontrolujte aktuálnu
}

// V build.gradle (:app) pridajte závislosti
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Skontrolujte aktuálnu verziu
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Skontrolujte aktuálnu verziu
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Skontrolujte aktuálnu verziu
}

// Definovanie rozhrania pre KSP
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Generovanie implementácie pomocou KSP
// Vytvorí triedu typu SettingsPrefImpl, ktorú môžete použiť na prístup k dátam

DataStore Preferences je odporúčaný spôsob ukladania jednoduchých nastavení a dát v Android, nahradzujúc zastarané SharedPreferences.