Sobes.tech
Junior

Pracoval jste s DataStore Preferences v Androidu?

sobes.tech AI

Odpověď od AI

Ano, pracoval jsem.

Preferences DataStore je asynchronní ekvivalent SharedPreferences, který je součástí AndroidX DataStore. Umožňuje bezpečně ukládat jednoduché páry klíč-hodnota pomocí KSP nad Kotlin Flow nebo RxJava3 pro asynchronní práci a Protobuf/Proto DataStore nebo Proto DataStore pro datové typy.

Hlavní výhody Preferences DataStore oproti SharedPreferences:

  • Asynchronní: Funguje s Flow nebo RxJava3, což zabraňuje blokování hlavního vlákna a předchází problémům s ANR.
  • Bezpečnost: Atomické operace čtení/zápisu zaručují konzistenci dat.
  • Typová bezpečnost: S Protobuf DataStore lze definovat schéma dat, což zabraňuje chybám při práci s typy.
  • Reaktivita: Umožňuje sledovat změny dat v reálném čase.

Příklad použití Preferences DataStore s Kotlin Flow:

// Vytvoření DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

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

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

Příklad použití KSP pro vytvoření bezpečného přístupu typu:

// V build.gradle (:app) přidejte plugin
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Příklad verze, zkontrolujte aktuální
}

// V build.gradle (:app) přidejte závislosti
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Zkontrolujte aktuální verzi
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Zkontrolujte aktuální verzi
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Zkontrolujte aktuální verzi
}

// Definice rozhraní pro KSP
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Generování implementace pomocí KSP
// Vytvoří třídu typu SettingsPrefImpl, kterou lze použít pro přístup k datům

DataStore Preferences je doporučený způsob ukládání jednoduchých nastavení a dat v Androidu, nahrazuje zastaralý SharedPreferences.