google改進Android資料存儲方法,推出用來代替原本SharedPreferences的Jetpack DataStore測試版,Jetpack DataStore是以Kotlin協程和Flow功能為基礎,并提供了Proto DataStore和Preferences DataStore兩種實例,Google提到,由于Jetpack DataStore的資料以異步、一致和交易的方式存儲,克服了SharedPreferences大多數的缺點。

Proto DataStore使用Protocol Buffers(Protobufs),專門用來存儲類型對象,而Preferences DataStore則可儲存鍵值對,官方比較了SharedPreferences與這兩種新存儲實例的差異(下圖),新的實例功能明顯較多,除了具有資料交易API,能夠強健地保證資料一致性之外,也能夠使用Flow,更好地支持異步存儲。
Google解釋只有SharedPreferences才有,重新實例拿掉同步API的原因,官方提到,乍看之下,同步API可以安全地在UI線程上執行調用,但實際上線程仍可以執行磁盤I/O,而且Apply又會阻擋fsync上的UI線程,因此每當服務與活動啟動或是停止時,就會觸發暫停fsync調用。雖然Google在新的實例拿掉了同步API,不過在Jetpack DataStore中,Proto DataStore和Preferences DataStore卻可以安全地在UI線程上調用函數。
雖然兩個新實例都可以用來存儲資料,但是卻使用不同的存儲方式,Preference DataStore更像是原本的SharedPreferences,無法定義架構,也無法確定以正確的類型訪問鍵值,而Proto DataStore則讓開發者能以Protocol Buffers定義架構,且因為Protobufs可以保留強類型資料,與XML和其他格式相比,Protobufs更小更簡單,因此Google表示,雖然Proto DataStore需要開發者學習新的串行化機制,但是Proto DataStore帶來強類型架構的優勢。
DataStore僅適合用來存儲小且簡單的資料集,當需要部分更新、參照完整性或是支持大型且復雜的資料集等功能,則Google不建議使用DataStore,推薦開發者使用Room。目前DataStore仍處于Alpha測試階段,開發者可以先查看Google提供的范例程序,同時準備遷移,開發者可以使用DataStore構建器,自動化遷移過程,但必需要注意的是,遷移程序必須在任何DataStore資料訪問發生前執行。