DataStore
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 5 月 1 日 | 1.1.1 | - | - | - |
宣告依附元件
如果要為 DataStore 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區。
DataStore 有兩種實作方式:偏好設定和 Proto。選擇其中一項。您還可以在任一實作方式中新增無 Android 依附元件。
在應用程式或模組的 build.gradle
檔案中,新增您需要實作的依附元件:
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") }
意見回饋
您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。
詳情請參閱 Issue Tracker 文件。
1.1 版本
1.1.1 版
2024 年 5 月 1 日
發布 androidx.datastore:datastore-*:1.1.1
。1.1.1 版包含這些修訂版本。
修正錯誤
- 緩解了「可能會發生資源死結」的 Linux 假警報角落的錯誤時,多個
DataStore
執行個體嘗試透過關閉檔案鎖定的方式,從不同程序寫入。
1.1.0 版本
2024 年 4 月 17 日
發布 androidx.datastore:datastore-*:1.1.0
。1.1.0 版包含這些修訂版本。
自 1.0.0 版以來的重大異動
詳情請參閱 Alpha 和 Beta 版的 1.1.0 版本資訊。1.1.0 的主要更新包括:
- DataStore 現在支援多個存取相同檔案的程序,並支援不同程序之間的觀測能力。
- 新的儲存空間介面可讓您自訂資料模型的儲存或序列化方式。
- 您現在可以在 Kotlin Multiplatform 專案中使用 DataStore。
1.1.0-rc01 版本
2024 年 4 月 3 日
發布 androidx.datastore:datastore-*:1.1.0-rc01
。1.1.0-rc01 版包含這些修訂版本。
修正錯誤
- 修正效能降低的問題:如果新資料與舊資料相同,
updateData
呼叫就無法針對磁碟寫入作業進行最佳化 (d64cfb5) - 已修正
MultiProcess
DataStore
可能會在初始化期間遺漏無效項目的競爭狀況。(b/326141553、(094c2dd))
1.1.0-beta02 版
2024 年 3 月 6 日
發布 androidx.datastore:datastore-*:1.1.0-beta02
。1.1.0-beta02 版包含這些修訂版本。
修正錯誤
DataStore
的效能提升項目只會在偵測到更新通知時收集更新通知。(b/267792241)。- 請注意,如果您使用協同程式測試程式庫,這項變更可能會在測試中觸發
UncompletedCoroutinesError
。在測試中初始化DataStore
時,請務必傳遞TestScope.backgroundScope
,以免發生這個問題。
- 請注意,如果您使用協同程式測試程式庫,這項變更可能會在測試中觸發
- 修正在同一個執行個體上的巢狀
updateData
呼叫會死結的問題。(b/241760537)。 - 如果
DataStore
在遷移期間無法刪除SharedPreferences
,則不再擲回IOExceptions
(b/195553816)。 - 已修正在非 Android JVM 環境中的
updateData
期間,檔案重新命名失敗的問題。(b/203087070)。 - 修正了在初始化
DataStore
後,系統不會處理CorruptionException
的問題。(b/289582516)。
1.1.0-beta01 版本
2024 年 1 月 10 日
androidx.datastore:datastore-*:1.1.0-beta01
自 1.1.0-alpha07
起沒有變更。1.1.0-beta01 版本包含以下修訂項目。
1.1.0-alpha07 版本
2023 年 11 月 29 日
發布 androidx.datastore:datastore-*:1.1.0-alpha07
。查看 1.1.0-alpha07 版的修訂項。
API 變更
修正錯誤
- 推出移除 1.1.0-alpha07 的
@ExperimentalMultiProcessDataStore
註解。(I8e607)。
1.1.0-alpha06 版本
2023 年 11 月 1 日
發布 androidx.datastore:datastore-*:1.1.0-alpha06
。查看 1.1.0-alpha06 版的修訂項。
API 變更
createSingleProcessCoordinator
工廠方法現在會接收檔案路徑 (String
、java.io.File
和okio.Path
),以便與createMultiProcessCoordinator
保持一致(I211c8、b/305755935)
1.1.0-alpha05 版本
2023 年 9 月 6 日
發布 androidx.datastore:datastore-*:1.1.0-alpha05
。查看 1.1.0-alpha05 版的修訂項。
API 變更
- Datastore
FileStorage
現已公開,因此用戶端可以提供自訂參數。(Icb985)。 - 已將
OkioStorage
建構函式變更為接受InterProcessCoordinator
,以便在 Android 上搭配MultiProcessCoordinator
使用。(Iecea3)。
修正錯誤
- 修正
MultiProcessCoordinator
無法監控同一目錄中的多個檔案。 - 修正問題:檔案路徑未正規化時,無法偵測重複檔案。
- 修正
RxDataStore#isDisposed
傳回的錯誤值。 - 修正
datstore-preferences-core
構件缺少 ProGuard 設定的問題。
1.1.0-alpha04 版本
2023 年 4 月 5 日
發布 androidx.datastore:datastore-*:1.1.0-alpha04
。1.1.0-alpha04 版包含此連結所列的修訂項目。
修正錯誤
- 改善內部實作,避免發生
DataStore
資料流在更新後可能會發出舊值的競爭狀況。
1.1.0-alpha03 版本
2023 年 3 月 24 日
發布 androidx.datastore:datastore-*:1.1.0-alpha03
。
修正錯誤
- 移除 Maven 構件中的依附元件限制,以解決 Kotlin Native Targets 中的建構問題 (b/274786186、KT-57531)。
1.1.0-alpha02 版本
2023 年 3 月 22 日
發布 androidx.datastore:datastore-*:1.1.0-alpha02
。查看 1.1.0-alpha02 版的修訂項。
附註
請注意,這個版本包含重要的內部重構,將單一程序和多重程序 DataStore 實作的實作合併。請留意可能發生的意外行為變更,例如更新通知的時間。您可以使用 Issue Tracker 元件回報這類變更。
新功能
- 您現在可以在 KMM 專案中使用
DataStore
。請注意,DataStore 的非 Android 目標仍處於實驗階段,但我們決定合併不同版本,方便開發人員試用。 - 多程序功能已從
androidx.datastore.multiprocess
移至androidx.datastore.core
。 - 在
androidx.datastore.core.MultiProcessDataStoreFactory
中新增工廠方法,建立含有Storage
物件的 DataStore 執行個體,以進行檔案作業。 - 新增介面
InterProcessCoordinator
,協助多個 DataStore 執行個體在程序之間通訊。請注意,InterProcessCoordinator
的多程序實作僅適用於 Android。
API 變更
- 在 datastore-core 介面新增
InterProcessCoordinator
至StorageConnection
(I555bb) - 變更 datastore-core
MultiProcessDataStoreFactory
中的 API 以使用儲存空間。(Iac02f)。 - 將 datastore-multiprocess 中的公用 API 移至 datastore-core (I76d7c)
- 從 datastore-preferences-core 公開
PreferencesSerializer
(I4b788) - 新增
@JvmDefaultWithCompatibility
註解 (I8f206)
1.1.0-alpha01 版本
2022 年 11 月 9 日
發布 androidx.datastore:datastore-*:1.1.0-alpha01
。1.1.0-alpha01 版包含以下修訂項目。
新功能
- 支援多程序用途,保證在不同程序
DataStore
執行個體之間的資料一致性。新增MultiProcessDataStoreFactory#create
以建立此類DataStore
執行個體。 - 推出新的儲存介面,從而允許退出
Datastore
的基礎儲存機制。針對 java.io 和 okio 提供實作功能。DataStore
工廠的新方法可接受這個儲存介面物件。
API 變更
- 變更 datastore-core
MultiProcessDataStoreFactory
中的 API 以使用儲存空間。(Iac02f)。 - 將 datastore-multiprocess 中的公用 API 移至 datastore-core (I76d7c)
- 從 datastore-preferences-core 公開
PreferencesSerializer
(I4b788)
1.0.0 版本
1.0.0 版本
2021 年 8 月 4 日
androidx.datastore:datastore-*:1.0.0
發布。1.0.0 版包含此連結所列的修訂項目。
1.0.0 的主要功能
Jetpack DataStore 是一項資料儲存解決方案,可讓您使用通訊協定緩衝區儲存鍵/值組合或已輸入的物件。DataStore 使用 Kotlin 協同程式和「流程」,以非同步、一致且交易方式儲存資料。
1.0.0-rc02 版
2021 年 7 月 21 日
發布 androidx.datastore:datastore-*:1.0.0-rc02
。查看 1.0.0-rc02 版的修訂項。
修正錯誤
- 清楚說明沒有索引鍵時不會執行
SharedPreferencesMigration
。(Icfa32、b/192824325) - 修正根據
MIGRATE_ALL_KEYS
建構的SharedPreferencesMigration
時,如果要求的索引鍵還不存在,就會擲回例外狀況。(Ie318a、b/192824325)
1.0.0-rc01 版
2021 年 6 月 30 日
androidx.datastore:datastore-*:1.0.0-rc01
發布。1.0.0-rc01 版包含以下修訂項目。
修正錯誤
- 修正不慎在最終 jar 檔案中加入 .java 檔案的錯誤。(I65d96、b/188985637)
1.0.0-beta02 版
2021 年 6 月 16 日
androidx.datastore:datastore-*:1.0.0-beta02
發布。查看 1.0.0-beta02 版的修訂項。
修正錯誤
- 修正
ClassVerificationFailure
(b/187450483)
1.0.0-beta01 版
2021 年 4 月 21 日
androidx.datastore:datastore-*:1.0.0-beta01
發布。1.0.0-beta01 版包含此連結所列的修訂項目。
API 變更
- 移除僅限 kotlin 的 JVM 超載方法 (I2adc7)
修正錯誤
- 已修正 DataStore 委派可能導致結構定義外洩的錯誤 (Ie96fc、b/184415662)
1.0.0-alpha08 版本
2021 年 3 月 10 日
androidx.datastore:datastore-*:1.0.0-alpha08
發布。1.0.0-alpha08 版包含此連結所列的修訂項目。
API 變更
- 您現在可以新增根據
dataStore
和preferencesDataStore
資源委派結構定義的遷移作業。(I4ef69、b/173726702) - 新增輔助函式,如果已不再使用 DataStore 委派或 context.createDataStore,即可取得檔案名稱 (I60f9a)
- 序列化程式 writeTo 和 readFrom 現已暫停。如果您實作了序列化程式,則必須更新函式才能暫停函式。(I1e58e)
- 已為 RxDataStore 使用者新增資源委派。(Ied768、b/173726702)
修正錯誤
- 強制限制實驗 API 的公開使用行為 (I6aa29、b/174531520)
1.0.0-alpha07 版本
2021 年 2 月 24 日
androidx.datastore:datastore-*:1.0.0-alpha07
發布。查看 1.0.0-alpha07 版的修訂項。
API 變更
Context.createDataStore
的擴充功能函式已移除,並替換為 globalDataStore 資源委派。請在 kotlin 檔案中的頂層呼叫 globalDataStore 一次。例如:val Context.myDataStore by dataStore(...)
請將此項目置於 Kotlin 檔案的頂層,這樣就只有一個執行個體。(I57215、b/173726702)
RxDataStore 函式現在屬於 RxDataStore 類別,而非 DataStore 中的擴充功能函式。(Idccdb、b/177691248)
如要將 EncryptedSharedPreferences (或直接啟動 SharedPreferences) 遷移至 DataStore,您現在可以使用新的 SharedPreferencesMigration 建構函式來插入 SharedPreferences。(I8e04e、b/177278510)
修正錯誤
- 如果同一個檔案有多個有效的 DataStore,則 DataStore 現在會擲回例外狀況。如果您並非以單例模式管理 DataStore,或不確定某個檔案沒有兩個 DataStore 執行個體同時處於有效狀態,那麼在讀取或寫入 DataStore 時,可能會看到例外狀況。只要以單例模式管理 DataStore 即可修正此問題。(Ib43f4、b/177691248)
- 修正取消呼叫端範圍時的取消行為。(I2c7b3)
1.0.0-alpha06 版本
2021 年 1 月 13 日
androidx.datastore:datastore-*:1.0.0-alpha06
發布。1.0.0-alpha06 版本包含以下修訂項目。
新功能
- 已為 DataStore 新增 RxJava 包裝函式。
datastore-rxjava2/3
構件包含核心 DataStore API (RxDataStore
、RxDataStoreBuilder
和RxDataMigration
) 的包裝函式。datastore-preferences-rxjava2/3
構件包含建構 Preferences DataStore 的建構工具。
API 變更
- 隱藏 CorruptionHandler 介面。由於 DataStore 工廠只接受 ReplaceFileCorruptionHandler,因此不對外公開。(I0b3b3、b/176032264)
preferencesKey<T>(name: String): Key<T>
方法已移除,並替換成各個支援類型的專屬方法,例如:preferencesKey<Int>("int")
現為intPreferencesKey("int")
。(Ibcfac、b/170311106)
修正錯誤
- 修正 DataStoreFactory 的說明文件,原文件中遺漏 DataStore 檔案是在「datastore/」子目錄中建立的資訊。(Ica222)
1.0.0-alpha05 版本
2020 年 12 月 2 日
androidx.datastore:datastore-*:1.0.0-alpha05
發布。1.0.0-alpha05 版本包含以下修訂項目。
修正錯誤
- 針對 DataStore 的並行寫入作業新增更詳盡的說明文件和例外狀況。(Ia98a2、b/173522155、b/173726702)
- 我們現在允許 (但不要求) 關閉傳遞至
Serializer.writeTo()
的 OutputStream。(I5c9bf、b/173037611)
1.0.0-alpha04 版本
2020 年 11 月 17 日
androidx.datastore:datastore-*:1.0.0-alpha04
發布。查看 1.0.0-alpha04 版的修訂項。
修正錯誤
- 已修正導致偏好設定 DataStore
1.0.0-alpha03
發生以下異常終止狀況的包裝問題:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
- 異常終止的原報告位置:b/173036843
- (I4712d、b/173036843)
1.0.0-alpha03 版本
2020 年 11 月 11 日
發布 androidx.datastore:datastore-*:1.0.0-alpha03
。查看 1.0.0-alpha03 版的修訂項。
新功能
- 偏好設定現在支援雙精度值 (如果需要比浮點值更高的精確度,這會非常實用。(I5be8f、b/169471808)
API 變更
- 為 Datastore 建立純 Kotlin 依附元件,以加快編譯速度。
androidx.datastore:datastore-core
包含僅限核心 kotlin 的 API,而androidx.datastore:datastore
則包含需要 Android 的 API (包括SharedPreferencesMigration
和Context.createDataStore
建構函式)。(I42d75、b/168512698) - 分割偏好設定資料存放區,加快 Kotlin 編譯作業 (Ia3c19)
如果磁碟上沒有資料,序列化程式現在會要求新的屬性以使用預設值。這有助於輕鬆導入自訂序列化程式,讓使用者不必特別設定空白的輸入串流 (空白的輸入串流不會以 JSON 剖析)。
- 此外,系統現在也會檢查確認提供給 writeTo() 的輸出串流未關閉,若關閉則擲回例外狀況 (I16e29)
將 SharedPreferencesView 的建構函式設為內部函式。此項目原本為公開性質,允許測試。測試時應改為建立 SharedPreferencesMigration 並對此進行測試。(I93891)
修正錯誤
DataStoreFactory
和PreferenceDataStoreFactory
上的produceFile
參數現是清單中的最後一個參數,可讓您使用 kotlin 結尾 lambda 語法。(Ibe7f1、b/169425442)- 遵循 kotlin 新的明確 API 要求 (I5ae1e)
已知問題
- 偏好設定 Datastore 發生
java.lang.NoClassDefFoundError
異常終止。(b/173036843)
1.0.0-alpha02 版
2020 年 10 月 14 日
發布 androidx.datastore:datastore-core:1.0.0-alpha02
和 androidx.datastore:datastore-preferences:1.0.0-alpha02
。1.0.0-alpha02 版包含此連結所列的修訂項目。
修正錯誤
- 在 datastore-core 中新增了保護措施以防止發生變化。對於 DataStore 非 proto/非偏好設定類型的使用者而言,變化會打斷 DataStore 的使用 (I6aa84)
- 已將
toString
方法新增至 Preferences.kt,輕鬆對目前狀態進行偵錯 (I96006) - 已新增例外狀況,避免
DataStore.Preferences
遭到濫用 (I1134d) - 已修正會導致應用程式啟動時異常終止的錯誤 (I69237、b/168580258)
1.0.0-alpha01 版
2020 年 9 月 2 日
發布 androidx.datastore:datastore-core:1.0.0-alpha01
和 androidx.datastore:datastore-preferences:1.0.0-alpha01
。1.0.0-alpha01 版包含此連結所列的修訂項目。
新功能
Jetpack DataStore 是全新的進階資料儲存解決方案,旨在取代 SharedPreferences。DataStore 以 Kotlin 協同程式和 Flow 為基礎而設計,可以提供兩種不同的實作方式:
- Proto DataStore 可讓您儲存已輸入的物件 (由通訊協定緩衝區支援)
- 用於儲存鍵/值組合的偏好設定 DataStore
資料會以非同步、一致且交易方式儲存,克服 SharedPreferences 的大多數缺點。