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-ը։