Sobes.tech
Junior

Έχετε εργαστεί με DataStore Preferences στο Android;

sobes.tech AI

Απάντηση από AI

Ναι, δούλεψα.

Οι Προτιμήσεις DataStore είναι το ασύγχρονο ανάλογο των SharedPreferences, που περιλαμβάνονται στο AndroidX DataStore. Επιτρέπει την ασφαλή αποθήκευση απλών ζευγών κλειδιού-τιμής, χρησιμοποιώντας KSP πάνω σε Kotlin Flow ή RxJava3 για ασύγχρονη εργασία και Protobuf/Proto DataStore ή Proto DataStore για τύπους δεδομένων.

Τα κύρια πλεονεκτήματα των Preferences DataStore σε σύγκριση με τα SharedPreferences:

  • Ασύγχρονη λειτουργία: Λειτουργεί με Flow ή RxJava3, αποτρέποντας το μπλοκάρισμα του κύριου νήματος και αποφεύγοντας προβλήματα ANR.
  • Ασφάλεια: Οι ατομικές λειτουργίες ανάγνωσης/εγγραφής εγγυώνται τη συνοχή των δεδομένων.
  • Ασφάλεια τύπων: Με το Protobuf DataStore, μπορείτε να ορίσετε ένα σχήμα δεδομένων, αποφεύγοντας σφάλματα κατά την εργασία με τύπους.
  • Αντιδραστικότητα: Επιτρέπει την παρακολούθηση των αλλαγών δεδομένων σε πραγματικό χρόνο.

Παράδειγμα χρήσης των Preferences DataStore με 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) προσθέστε το plugin
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Παράδειγμα έκδοσης, ελέγξτε την τρέχουσα
}

// Στο build.gradle (:app) προσθέστε dependencies
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 είναι η συνιστώμενη μέθοδος αποθήκευσης απλών ρυθμίσεων και δεδομένων στο Android, αντικαθιστώντας το παλιό SharedPreferences.