Sobes.tech
Junior

Работили ли сте с DataStore Preferences в Android?

sobes.tech AI

Отговор от AI

Да, работил.

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.