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資料存取發生前執行。

熱門新聞

Advertisement