Sobes.tech
Junior

თქვენ მუშაობდით Android-ის DataStore Preferences-თან?

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-ს.