Android SharePreference 在主進程和次進程間共享數據不同步出錯


 

    SharedPreference作為android五大存儲(網絡,數據庫,文件,SharedPreference,contentProvider)之中最方便使用的一個,從類名上來看就不是一個存儲大數據的工具,以key/value成對的形式來存儲基本數據類型,只能存儲基本數據類型。

    在平時的開發中偶爾會遇到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是最好的選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM