DataStore

Menyimpan data secara asinkron, konsisten, dan transaksional, yang mengatasi beberapa kelemahan SharedPreferences
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
1 Mei 2024 1.1.1 - - -

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada DataStore, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.

Ada dua implementasi DataStore: Preferensi dan Proto. Pilih salah satu. Anda juga dapat menambahkan dependensi bebas Android ke salah satu implementasi tersebut.

Tambahkan dependensi untuk implementasi yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Preferences DataStore

Groovy

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation "androidx.datastore:datastore-preferences:1.1.1"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.1"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.1"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.1.1"
    }
    

Kotlin

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.1.1")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.1")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.1")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.1.1")
    }
    

Proto DataStore

Groovy

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.1.1"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.1.1"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.1.1"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.1.1"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.1.1")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.1.1")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.1.1")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.1.1")
    }
    

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.1

Versi 1.1.1

1 Mei 2024

androidx.datastore:datastore-*:1.1.1 dirilis. Versi 1.1.1 berisi commit ini.

Perbaikan Bug

  • Memitigasi alarm palsu Linux pada "Deadlock resource akan terjadi" error di kasus pojok beberapa instance DataStore mencoba menulis dari berbagai proses dengan mencadangkan kunci file.

Versi 1.1.0

17 April 2024

androidx.datastore:datastore-*:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Perubahan utama sejak rilis 1.0.0

Tinjau catatan rilis dari versi alfa dan beta 1.1.0 untuk info selengkapnya. Beberapa update utama pada 1.1.0 adalah:

  • DataStore kini mendukung beberapa proses yang mengakses file yang sama, dengan dukungan untuk kemampuan observasi di seluruh proses.
  • Antarmuka Storage baru memungkinkan Anda menyesuaikan cara menyimpan atau melakukan serialisasi model data Anda.
  • Anda kini dapat menggunakan DataStore di project Multiplatform Kotlin.

Versi 1.1.0-rc01

3 April 2024

androidx.datastore:datastore-*:1.1.0-rc01 dirilis. Versi 1.1.0-rc01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki penurunan performa saat panggilan updateData tidak mengoptimalkan penulisan disk jika data baru sama dengan data lama (d64cfb5)
  • Memperbaiki kondisi race saat MultiProcess DataStore mungkin melewatkan pembatalan validasi selama inisialisasi. ((b/326141553),(094c2dd))

Versi 1.1.0-beta02

6 Maret 2024

androidx.datastore:datastore-*:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perbaikan Bug

  • Peningkatan performa pada DataStore hanya mengumpulkan notifikasi update saat diamati. (b/267792241)
    • Perhatikan bahwa perubahan ini dapat memicu UncompletedCoroutinesError dalam pengujian jika Anda menggunakan library pengujian Coroutine. Pastikan Anda meneruskan TestScope.backgroundScope saat melakukan inisialisasi DataStore dalam pengujian untuk menghindari masalah ini.
  • Memperbaiki masalah panggilan updateData bertingkat pada instance yang sama yang akan mengalami deadlock. (b/241760537)
  • Membuat DataStore tidak lagi menampilkan IOExceptions jika gagal menghapus SharedPreferences selama migrasi. (b/195553816)
  • Perbaikan masalah saat penggantian nama file gagal selama updateData di lingkungan JVM non-Android. (b/203087070)
  • Memperbaiki masalah saat CorruptionException tidak ditangani setelah inisialisasi DataStore. (b/289582516)

Versi 1.1.0-beta01

10 Januari 2024

androidx.datastore:datastore-*:1.1.0-beta01 dirilis tanpa perubahan sejak 1.1.0-alpha07. Versi 1.1.0-beta01 berisi commit berikut.

Versi 1.1.0-alpha07

29 November 2023

androidx.datastore:datastore-*:1.1.0-alpha07 dirilis. Versi 1.1.0-alpha07 berisi commit ini.

Perubahan API

  • Metode MultiProcessDataStoreFactory tidak lagi bersifat eksperimental.Anotasi @ExperimentalMultiProcessDataStore telah dihapus sepenuhnya. (I8e54, I8e607)

Perbaikan Bug

  • Luncurkan penghapusan anotasi @ExperimentalMultiProcessDataStore ke 1.1.0-alpha07. (I8e607)

Versi 1.1.0-alpha06

1 November 2023

androidx.datastore:datastore-*:1.1.0-alpha06 dirilis. Versi 1.1.0-alpha06 berisi commit ini.

Perubahan API

  • Metode factory createSingleProcessCoordinator kini menerima jalur file (String, java.io.File, dan okio.Path) agar konsisten dengan createMultiProcessCoordinator. (I211c8, b/305755935)

Versi 1.1.0-alpha05

6 September 2023

androidx.datastore:datastore-*:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

Perubahan API

  • Datastore FileStorage kini tersedia untuk publik, sehingga klien dapat menyediakan parameter kustom. (Icb985)
  • Mengubah konstruktor OkioStorage untuk menerima InterProcessCoordinator sehingga dapat digunakan di Android dengan MultiProcessCoordinator. (Iecea3)

Perbaikan Bug

  • Memperbaiki MultiProcessCoordinator yang tidak dapat memantau beberapa file dalam direktori yang sama.
  • Memperbaiki masalah yang tidak dapat mendeteksi file duplikat jika jalur file tidak dinormalisasi.
  • Perbaiki nilai salah yang ditampilkan dari RxDataStore#isDisposed.
  • Memperbaiki konfigurasi proguard yang tidak ada untuk artefak datstore-preferences-core.

Versi 1.1.0-alpha04

5 April 2023

androidx.datastore:datastore-*:1.1.0-alpha04 dirilis. Versi 1.1.0-alpha04 berisi commit ini.

Perbaikan Bug

  • Meningkatkan kualitas implementasi internal untuk menghindari kondisi race di mana aliran data DataStore mungkin memunculkan nilai yang lebih lama setelah update.

Versi 1.1.0-alpha03

24 Maret 2023

androidx.datastore:datastore-*:1.1.0-alpha03 dirilis.

Perbaikan Bug

  • Menghapus batasan dependensi dari artefak Maven untuk mengatasi masalah build di Target Native Kotlin (b/274786186, KT-57531).

Versi 1.1.0-alpha02

22 Maret 2023

androidx.datastore:datastore-*:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Catatan

Perhatikan bahwa versi ini menyertakan pemfaktoran ulang internal penting yang menggabungkan implementasi untuk implementasi DataStore multiproses dan proses tunggal. Perhatikan kemungkinan perubahan perilaku yang tidak diinginkan (misalnya, waktu notifikasi update). Anda dapat menggunakan komponen issue tracker untuk melaporkan perubahan tersebut.

Fitur Baru

  • Anda sekarang dapat menggunakan DataStore di project KMM. Perlu diperhatikan bahwa target non-Android DataStore masih bersifat eksperimental, tetapi kami memutuskan untuk menggabungkan versi agar lebih mudah bagi developer untuk mencobanya.
  • Fitur multiproses dipindahkan dari androidx.datastore.multiprocess ke androidx.datastore.core.
  • Tambahkan metode factory baru di androidx.datastore.core.MultiProcessDataStoreFactory untuk membuat instance DataStore dengan objek Storage untuk operasi file.
  • Tambahkan antarmuka InterProcessCoordinator baru yang membantu beberapa instance DataStore berkomunikasi di seluruh proses. Perhatikan bahwa, penerapan Multi-Proses InterProcessCoordinator hanya tersedia di Android.

Perubahan API

  • Menambahkan InterProcessCoordinator ke StorageConnection di antarmuka datastore-core (I555bb)
  • Mengubah API dalam datastore-core MultiProcessDataStoreFactory untuk menggunakan Storage. (Iac02f)
  • Memindahkan API publik dalam datastore-multiprocess ke datastore-core (I76d7c)
  • Mengekspos PreferencesSerializer dari datastore-preferences-core (I4b788)
  • Menambahkan anotasi @JvmDefaultWithCompatibility (I8f206)

Versi 1.1.0-alpha01

9 November 2022

androidx.datastore:datastore-*:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Fitur Baru

  • Mendukung kasus penggunaan multiproses tempat konsistensi data terjamin di antara instance DataStore di seluruh proses. Tambahkan MultiProcessDataStoreFactory#create untuk membuat instance DataStore tersebut.
  • Antarmuka Storage baru yang memungkinkan mekanisme penyimpanan dasar agar Datastore dialihkan. Implementasi untuk java.io dan okio tersedia. Factory DataStore memiliki metode baru yang menerima objek Storage ini.

Perubahan API

  • Mengubah API dalam datastore-core MultiProcessDataStoreFactory untuk menggunakan Storage. (Iac02f)
  • Memindahkan API publik dalam datastore-multiprocess ke datastore-core (I76d7c)
  • Mengekspos PreferencesSerializer dari datastore-preferences-core (I4b788)

Versi 1.0.0

Versi 1.0.0

4 Agustus 2021

androidx.datastore:datastore-*:1.0.0 dirilis. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0

Jetpack DataStore adalah solusi penyimpanan data yang memungkinkan Anda menyimpan key-value pair atau objek yang diketik dengan buffering protokol. DataStore menggunakan coroutine Kotlin dan Flow untuk menyimpan data secara asinkron, konsisten, dan transaksional.

Versi 1.0.0-rc02

21 Juli 2021

androidx.datastore:datastore-*:1.0.0-rc02 dirilis. Versi 1.0.0-rc02 berisi commit ini.

Perbaikan Bug

  • Mengklarifikasi bahwa SharedPreferencesMigration tidak berjalan jika tidak ada kunci. (Icfa32, b/192824325)
  • Memperbaiki bug ketika SharedPreferencesMigration yang dibuat dengan MIGRATE_ALL_KEYS akan memunculkan pengecualian jika kunci yang diminta belum ada. (Ie318a, b/192824325)

Versi 1.0.0-rc01

30 Juni 2021

androidx.datastore:datastore-*:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki bug yang menyebabkan file .java tidak sengaja ditambahkan ke JAR final (I65d96, b/188985637)

Versi 1.0.0-beta02

16 Juni 2021

androidx.datastore:datastore-*:1.0.0-beta02 dirilis. Versi 1.0.0-beta02 berisi commit ini.

Perbaikan Bug

Versi 1.0.0-beta01

21 April 2021

androidx.datastore:datastore-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Perubahan API

  • Menghapus kelebihan JVM untuk metode khusus kotlin (I2adc7)

Perbaikan Bug

  • Memperbaiki bug tempat delegasi datastore dapat menyebabkan kebocoran konteks (Ie96fc, b/184415662)

Versi 1.0.0-alpha08

10 Maret 2021

androidx.datastore:datastore-*:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit ini.

Perubahan API

  • Sekarang Anda dapat menambahkan migrasi yang bergantung pada konteks ke delegasi properti dataStore dan preferencesDataStore. (I4ef69, b/173726702)
  • Menambahkan fungsi bantuan untuk mendapatkan nama file jika Anda tidak lagi menggunakan delegasi datastore atau context.createDataStore (I60f9a)
  • Penserialisasi writeTo dan readFrom sekarang menjadi penangguhan. Jika telah menerapkan Penserialisasi, Anda harus memperbarui fungsi agar menjadi fungsi penangguhan. (I1e58e)
  • Menambahkan delegasi properti untuk pengguna RxDataStore. (Ied768, b/173726702)

Perbaikan Bug

Versi 1.0.0-alpha07

24 Februari 2021

androidx.datastore:datastore-*:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit ini.

Perubahan API

  • Fungsi ekstensi Context.createDataStore telah dihapus dan diganti dengan delegasi properti globalDataStore. Panggil globalDataStore sekali di tingkat atas dalam file kotlin Anda. Contoh:

    val Context.myDataStore by dataStore(...)
    

    Letakkan ini di tingkat atas file kotlin Anda sehingga hanya ada satu instance. (I57215, b/173726702)

  • Fungsi RxDataStore sekarang berada di class RxDataStore, bukan fungsi ekstensi di DataStore. (Idccdb, b/177691248)

  • Jika ingin memigrasikan EncryptedSharedPreferences (atau booting langsung SharedPreferences) ke DataStore, kini Anda dapat melakukannya dengan konstruktor SharedPreferencesMigration baru yang memungkinkan Anda untuk memasukkan SharedPreferences. (I8e04e, b/177278510)

Perbaikan Bug

  • DataStore sekarang akan memberikan pengecualian jika ada beberapa DataStore aktif untuk file yang sama. Jika Anda tidak mengelola DataStore sebagai Singleton atau tidak memastikan bahwa tidak ada dua instance DataStore yang aktif secara bersamaan untuk suatu file, maka Anda dapat melihat pengecualian saat membaca atau menulis ke DataStore. Hal ini dapat diperbaiki dengan mengelola DataStore Anda sebagai Singleton. (Ib43f4, b/177691248)
  • Perbaiki perilaku pembatalan saat cakupan pemanggil dibatalkan. (I2c7b3)

Versi 1.0.0-alpha06

13 Januari 2021

androidx.datastore:datastore-*:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.

Fitur Baru

  • Menambahkan wrapper RxJava untuk DataStore. Artefak datastore-rxjava2/3 berisi wrapper untuk DataStore API inti (RxDataStore, RxDataStoreBuilder, dan RxDataMigration). Artefak datastore-preferences-rxjava2/3 berisi builder untuk menyusun Preference DataStore.

Perubahan API

  • Menyembunyikan antarmuka CorruptionHandler. Tidak ada alasan untuk menampilkannya ke publik karena factory DataStore hanya menerima ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Metode preferencesKey<T>(name: String): Key<T> telah dihapus dan diganti dengan metode khusus untuk setiap jenis yang didukung, misalnya preferencesKey<Int>("int") sekarang intPreferencesKey("int") (Ibcfac, b/170311106)

Perbaikan Bug

  • Memperbaiki dokumentasi di DataStoreFactory yang mengabaikan fakta bahwa file datastore dibuat di subdirektori "datastore/". (Ica222)

Versi 1.0.0-alpha05

2 Desember 2020

androidx.datastore:datastore-*:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Menambahkan dokumentasi dan pengecualian yang lebih baik seputar penulisan serentak dari datastore. (Ia98a2, b/173522155, b/173726702)
  • Kini kami mengizinkan (tetapi tidak mengharuskan) OutputStream diteruskan ke Serializer.writeTo() untuk ditutup. (I5c9bf, b/173037611)

Versi 1.0.0-alpha04

17 November 2020

androidx.datastore:datastore-*:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit ini.

Perbaikan Bug

  • Memperbaiki masalah paket yang menyebabkan error berikut di Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Versi 1.0.0-alpha03

11 November 2020

androidx.datastore:datastore-*:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.

Fitur Baru

  • Preferensi kini mendukung nilai ganda (yang berguna jika Anda lebih memerlukan presisi daripada float) (I5be8f, b/169471808)

Perubahan API

  • Membuat dependensi kotlin murni untuk datastore guna memungkinkan kompilasi yang lebih cepat. androidx.datastore:datastore-core berisi API khusus kotlin inti dan androidx.datastore:datastore berisi API yang bergantung pada android (termasuk konstruktor SharedPreferencesMigration dan Context.createDataStore.)(I42d75, b/168512698)
  • Memisahkan target untuk penyimpanan data preferensi agar kompilasi kotlin lebih cepat (Ia3c19)
  • Penserialisasi kini memerlukan properti baru untuk nilai default yang akan digunakan jika tidak ada data pada disk. Hal ini mempermudah implementasi penserialisasi kustom sehingga pengguna tidak harus memperlakukan aliran data input kosong sebagai kasus khusus (aliran data input kosong tidak diurai dengan json).

    • Selain itu, kini juga terdapat pemeriksaan untuk mengonfirmasi bahwa aliran data output yang diberikan ke writeTo() tidak ditutup, dan jika ditutup, akan ada pengecualian (I16e29)
  • Membuat konstruktor untuk internal SharedPreferencesView. Ini awalnya bersifat publik untuk mengizinkan pengujian. Sebagai gantinya, pengujian harus membuat SharedPreferencesMigration dan melakukan pengujian terhadapnya. (I93891)

Perbaikan Bug

  • Parameter produceFile pada DataStoreFactory dan PreferenceDataStoreFactory kini menjadi parameter terakhir dalam daftar sehingga memungkinkan Anda menggunakan sintaksis lambda akhir kotlin. (Ibe7f1, b/169425442)
  • Mengikuti persyaratan API eksplisit baru untuk kotlin (I5ae1e)

Masalah Umum

  • Preference Datastore mengalami error dengan java.lang.NoClassDefFoundError. (b/173036843)

Versi 1.0.0-alpha02

14 Oktober 2020

androidx.datastore:datastore-core:1.0.0-alpha02 dan androidx.datastore:datastore-preferences:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit ini.

Perbaikan Bug

  • Menambahkan pengamanan terhadap mutasi di datastore-core. Mutasi akan menyebabkan gangguan pada penggunaan datastore untuk orang yang menggunakan datastore dengan jenis non-proto/non-preferences (I6aa84)
  • Menambahkan metode toString ke Preferences.kt agar status saat ini mudah di-debug (I96006)
  • Menambahkan pengecualian agar tidak terjadi penyalahgunaan DataStore.Preferences (I1134d)
  • Memperbaiki bug yang akan menyebabkan aplikasi mengalami error saat memulai (I69237, b/168580258)

Versi 1.0.0-alpha01

2 September 2020

androidx.datastore:datastore-core:1.0.0-alpha01 dan androidx.datastore:datastore-preferences:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit ini.

Fitur Baru

Jetpack DataStore adalah solusi penyimpanan data baru dan telah disempurnakan yang ditujukan untuk mengganti SharedPreferences. Di-build pada coroutine Kotlin dan Flow, DataStore menyediakan dua implementasi yang berbeda:

  • Proto DataStore, yang memungkinkan Anda menyimpan objek yang diketik (didukung oleh buffering protokol)
  • Menjadikan DataStore sebagai preferensi, yang menyimpan key-value pair

Data disimpan secara asinkron, konsisten, dan transaksional, yang mengatasi sebagian besar kelemahan SharedPreferences.