DataStore

以非同步、一致且交易方式儲存資料,克服 SharedPreferences 的某些缺點
最近更新時間 穩定版 候選版 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-beta011.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 變更

  • MultiProcessDataStoreFactory 方法不再處於實驗階段。@ExperimentalMultiProcessDataStore 註解已完全移除。(Ieee54I8e607)

修正錯誤

  • 推出移除 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 工廠方法現在會接收檔案路徑 (Stringjava.io.Fileokio.Path),以便與 createMultiProcessCoordinator 保持一致(I211c8b/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-alpha041.1.0-alpha04 版包含此連結所列的修訂項目。

修正錯誤

  • 改善內部實作,避免發生 DataStore 資料流在更新後可能會發出舊值的競爭狀況。

1.1.0-alpha03 版本

2023 年 3 月 24 日

發布 androidx.datastore:datastore-*:1.1.0-alpha03

修正錯誤

  • 移除 Maven 構件中的依附元件限制,以解決 Kotlin Native Targets 中的建構問題 (b/274786186KT-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 介面新增 InterProcessCoordinatorStorageConnection (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-alpha011.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。(Icfa32b/192824325)
  • 修正根據 MIGRATE_ALL_KEYS 建構的 SharedPreferencesMigration 時,如果要求的索引鍵還不存在,就會擲回例外狀況。(Ie318ab/192824325)

1.0.0-rc01 版

2021 年 6 月 30 日

androidx.datastore:datastore-*:1.0.0-rc01 發布。1.0.0-rc01 版包含以下修訂項目。

修正錯誤

  • 修正不慎在最終 jar 檔案中加入 .java 檔案的錯誤。(I65d96b/188985637)

1.0.0-beta02 版

2021 年 6 月 16 日

androidx.datastore:datastore-*:1.0.0-beta02 發布。查看 1.0.0-beta02 版的修訂項

修正錯誤

1.0.0-beta01 版

2021 年 4 月 21 日

androidx.datastore:datastore-*:1.0.0-beta01 發布。1.0.0-beta01 版包含此連結所列的修訂項目。

API 變更

  • 移除僅限 kotlin 的 JVM 超載方法 (I2adc7)

修正錯誤

  • 已修正 DataStore 委派可能導致結構定義外洩的錯誤 (Ie96fcb/184415662)

1.0.0-alpha08 版本

2021 年 3 月 10 日

androidx.datastore:datastore-*:1.0.0-alpha08 發布。1.0.0-alpha08 版包含此連結所列的修訂項目。

API 變更

  • 您現在可以新增根據 dataStorepreferencesDataStore 資源委派結構定義的遷移作業。(I4ef69b/173726702)
  • 新增輔助函式,如果已不再使用 DataStore 委派或 context.createDataStore,即可取得檔案名稱 (I60f9a)
  • 序列化程式 writeTo 和 readFrom 現已暫停。如果您實作了序列化程式,則必須更新函式才能暫停函式。(I1e58e)
  • 已為 RxDataStore 使用者新增資源委派。(Ied768b/173726702)

修正錯誤

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 檔案的頂層,這樣就只有一個執行個體。(I57215b/173726702)

  • RxDataStore 函式現在屬於 RxDataStore 類別,而非 DataStore 中的擴充功能函式。(Idccdbb/177691248)

  • 如要將 EncryptedSharedPreferences (或直接啟動 SharedPreferences) 遷移至 DataStore,您現在可以使用新的 SharedPreferencesMigration 建構函式來插入 SharedPreferences。(I8e04eb/177278510)

修正錯誤

  • 如果同一個檔案有多個有效的 DataStore,則 DataStore 現在會擲回例外狀況。如果您並非以單例模式管理 DataStore,或不確定某個檔案沒有兩個 DataStore 執行個體同時處於有效狀態,那麼在讀取或寫入 DataStore 時,可能會看到例外狀況。只要以單例模式管理 DataStore 即可修正此問題。(Ib43f4b/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 (RxDataStoreRxDataStoreBuilderRxDataMigration) 的包裝函式。datastore-preferences-rxjava2/3 構件包含建構 Preferences DataStore 的建構工具。

API 變更

  • 隱藏 CorruptionHandler 介面。由於 DataStore 工廠只接受 ReplaceFileCorruptionHandler,因此不對外公開。(I0b3b3b/176032264)
  • preferencesKey<T>(name: String): Key<T> 方法已移除,並替換成各個支援類型的專屬方法,例如:preferencesKey<Int>("int")現為 intPreferencesKey("int")。(Ibcfacb/170311106)

修正錯誤

  • 修正 DataStoreFactory 的說明文件,原文件中遺漏 DataStore 檔案是在「datastore/」子目錄中建立的資訊。(Ica222)

1.0.0-alpha05 版本

2020 年 12 月 2 日

androidx.datastore:datastore-*:1.0.0-alpha05 發布。1.0.0-alpha05 版本包含以下修訂項目。

修正錯誤

  • 針對 DataStore 的並行寫入作業新增更詳盡的說明文件和例外狀況。(Ia98a2b/173522155b/173726702)
  • 我們現在允許 (但不要求) 關閉傳遞至 Serializer.writeTo() 的 OutputStream。(I5c9bfb/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

1.0.0-alpha03 版本

2020 年 11 月 11 日

發布 androidx.datastore:datastore-*:1.0.0-alpha03查看 1.0.0-alpha03 版的修訂項

新功能

  • 偏好設定現在支援雙精度值 (如果需要比浮點值更高的精確度,這會非常實用。(I5be8fb/169471808)

API 變更

  • 為 Datastore 建立純 Kotlin 依附元件,以加快編譯速度。androidx.datastore:datastore-core 包含僅限核心 kotlin 的 API,而 androidx.datastore:datastore 則包含需要 Android 的 API (包括 SharedPreferencesMigrationContext.createDataStore 建構函式)。(I42d75b/168512698)
  • 分割偏好設定資料存放區,加快 Kotlin 編譯作業 (Ia3c19)
  • 如果磁碟上沒有資料,序列化程式現在會要求新的屬性以使用預設值。這有助於輕鬆導入自訂序列化程式,讓使用者不必特別設定空白的輸入串流 (空白的輸入串流不會以 JSON 剖析)。

    • 此外,系統現在也會檢查確認提供給 writeTo() 的輸出串流未關閉,若關閉則擲回例外狀況 (I16e29)
  • 將 SharedPreferencesView 的建構函式設為內部函式。此項目原本為公開性質,允許測試。測試時應改為建立 SharedPreferencesMigration 並對此進行測試。(I93891)

修正錯誤

  • DataStoreFactoryPreferenceDataStoreFactory 上的 produceFile 參數現是清單中的最後一個參數,可讓您使用 kotlin 結尾 lambda 語法。(Ibe7f1b/169425442)
  • 遵循 kotlin 新的明確 API 要求 (I5ae1e)

已知問題

  • 偏好設定 Datastore 發生 java.lang.NoClassDefFoundError 異常終止。(b/173036843)

1.0.0-alpha02 版

2020 年 10 月 14 日

發布 androidx.datastore:datastore-core:1.0.0-alpha02androidx.datastore:datastore-preferences:1.0.0-alpha021.0.0-alpha02 版包含此連結所列的修訂項目。

修正錯誤

  • 在 datastore-core 中新增了保護措施以防止發生變化。對於 DataStore 非 proto/非偏好設定類型的使用者而言,變化會打斷 DataStore 的使用 (I6aa84)
  • 已將 toString 方法新增至 Preferences.kt,輕鬆對目前狀態進行偵錯 (I96006)
  • 已新增例外狀況,避免 DataStore.Preferences 遭到濫用 (I1134d)
  • 已修正會導致應用程式啟動時異常終止的錯誤 (I69237b/168580258)

1.0.0-alpha01 版

2020 年 9 月 2 日

發布 androidx.datastore:datastore-core:1.0.0-alpha01androidx.datastore:datastore-preferences:1.0.0-alpha011.0.0-alpha01 版包含此連結所列的修訂項目。

新功能

Jetpack DataStore 是全新的進階資料儲存解決方案,旨在取代 SharedPreferences。DataStore 以 Kotlin 協同程式和 Flow 為基礎而設計,可以提供兩種不同的實作方式:

  • Proto DataStore 可讓您儲存已輸入的物件 (由通訊協定緩衝區支援)
  • 用於儲存鍵/值組合的偏好設定 DataStore

資料會以非同步、一致且交易方式儲存,克服 SharedPreferences 的大多數缺點。