DataStore
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.
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 meneruskanTestScope.backgroundScope
saat melakukan inisialisasiDataStore
dalam pengujian untuk menghindari masalah ini.
- Perhatikan bahwa perubahan ini dapat memicu
- Memperbaiki masalah panggilan
updateData
bertingkat pada instance yang sama yang akan mengalami deadlock. (b/241760537) - Membuat
DataStore
tidak lagi menampilkanIOExceptions
jika gagal menghapusSharedPreferences
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 inisialisasiDataStore
. (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
, danokio.Path
) agar konsisten dengancreateMultiProcessCoordinator
. (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 menerimaInterProcessCoordinator
sehingga dapat digunakan di Android denganMultiProcessCoordinator
. (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
keandroidx.datastore.core
. - Tambahkan metode factory baru di
androidx.datastore.core.MultiProcessDataStoreFactory
untuk membuat instance DataStore dengan objekStorage
untuk operasi file. - Tambahkan antarmuka
InterProcessCoordinator
baru yang membantu beberapa instance DataStore berkomunikasi di seluruh proses. Perhatikan bahwa, penerapan Multi-ProsesInterProcessCoordinator
hanya tersedia di Android.
Perubahan API
- Menambahkan
InterProcessCoordinator
keStorageConnection
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. TambahkanMultiProcessDataStoreFactory#create
untuk membuat instanceDataStore
tersebut. - Antarmuka Storage baru yang memungkinkan mekanisme penyimpanan dasar agar
Datastore
dialihkan. Implementasi untuk java.io dan okio tersedia. FactoryDataStore
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 denganMIGRATE_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
- Memperbaiki
ClassVerificationFailure
(b/187450483)
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
danpreferencesDataStore
. (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
- Menerapkan batasan di penggunaan publik API eksperimental (I6aa29, b/174531520)
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
, danRxDataMigration
). Artefakdatastore-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, misalnyapreferencesKey<Int>("int")
sekarangintPreferencesKey("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
- Error ini awalnya dilaporkan di sini: b/173036843
- (I4712d, b/173036843)
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 danandroidx.datastore:datastore
berisi API yang bergantung pada android (termasuk konstruktorSharedPreferencesMigration
danContext.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
padaDataStoreFactory
danPreferenceDataStoreFactory
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.