Sobes.tech
Middle

Դուք աշխատե՞լ եք DataStore Preferences-ով։

sobes.tech AI

Պատասխան AI-ից

Այո, ես աշխատել եմ Jetpack DataStore Preferences-ով:

Սա ժամանակակից և ավելի անվտանգ միջոց է փոքր տվյալների պահեստավորման համար համեմատած SharedPreferences-ով: Այն հիմնված է Kotlin Coroutines և Flow-ով, ինչը դարձնում է այն ասինխրոն, խոցելի սխալների նկատմամբ և բազմատ/thread անվտանգ:

Հիմնական առավելությունները DataStore Preferences-ի:

  • Ասինխրոնություն: Կարդալու և գրելու գործողությունները կատարվում են ասինխրոն, առանց գլխավոր հոսքը խափանելու:
  • Անվտանգություն: Աջակցում է ատոմային թարմացումների, կանխելով տվյալների վնասումը:
  • Բազմատ/thread անվտանգություն: Բազմատ/thread միջավայրում անվտանգ է օգտագործելու համար:
  • Flow-ի աջակցություն: Օգտագործում է Flow՝ տվյալների թարմացումները իրական ժամանակում ստանալու համար:
  • Խիստ տիպավորում: Աջակցում է տարբեր տվյալների տեսակների՝ Preferences.Key-ի միջոցով:

Օգտագործման օրինակ:

Ստեղծենք DataStore:

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

Ստեղծենք պահեստավորման բանալիներ:

// PreferencesKeys.kt
object PreferencesKeys {
    val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
    val EXAMPLE_TEXT = stringPreferencesKey("example_text")
    val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}

Կարդալ տվյալները:

// ExampleUsage.kt
// Կարդալ արժեքը Flow-ով
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Արժեք ստանալ ըստ բանալիի, նախնական արժեքով
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Տվյալների մշակումը
            println("Counter: $counter")
        }
}

// Կարդալ ընթացիկ արժեքը first()-ով
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Current counter: $counter")
}

Գրեք տվյալները:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Թարմացրեք արժեքը ըստ բանալիի
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "New text value"
    }
}

DataStore Preferences-ը հարմար է օգտագործողի կարգավորումները, ֆլագները և այլ նմանատիպ տեղեկությունները պահելու համար, որտեղ անհրաժեշտ չէ բարդ տվյալների կառուցվածք կամ ռելացիոն կապեր: Ավելի բարդ սցենարների համար ես կվերանայեի DataStore Proto կամ Room։