Android SharePreference 在主進程和次進程間共用資料不同步出錯

來源:互聯網
上載者:User

標籤:

 

    SharedPreference作為android五大儲存(網路,資料庫,檔案,SharedPreference,contentProvider)之中最方便使用的一個,從類名上來看就不是一個儲存大資料的工具,以key/value成對的形式來儲存基礎資料型別 (Elementary Data Type),只能儲存基礎資料型別 (Elementary Data Type)。

    在平時的開發中偶爾會遇到SharedPreference在多進程中修改同一個值出現的問題。多進程是指在ddms中看到的不同進程,包括不同應用(不管share uid 是否相同),同一個應用中配置android:process=""產生的多個進程。他們之間進行通訊都會造成主進程修改值之後,在次進程讀取到的還是第一次初始化時讀取到的值。

我歸納總結的解決辦法如下:

1、首先要將擷取SharedPreference的MODE設定為: MODE_MULTI_PROCESS 。其值為4(2.3以後有該屬性)。如:   getSharedPreferences("file_test", MODE_MULTI_PROCESS);.如果是使用MODE_PRIVATE這種模式,那麼另一個進程中寫入的值,將不會寫到檔案中。

2、其次為了保證修改資料即時提交到磁碟,不要將SharedPreference設定成成員變數,盡量在哪裡修改就在哪裡直接擷取SharedPreference,修改後別忘記commit。

如果做到了上面兩點,不出意外的話,資料就可以做到即時修改了。

 

3、如果兩個進程都需要適時讀取或根據該值進行邏輯操作,那麼最好在兩個進程間使用Service和aidl技術,aidl對於這種基本類型的傳遞很容易。

最後:對於分享資料來說:如果是瞬時分享資料,不需要長期儲存的話可以使用廣播。如果要分享大量資料的話使用 ContentProvider是最好的選擇。

Android SharePreference 在主進程和次進程間共用資料不同步出錯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.