本來(lái)只是簡(jiǎn)單做個(gè)筆記允青,詳細(xì)分析請(qǐng)點(diǎn)擊:
http://www.reibang.com/p/4984f66f9a4b
首先我們了解下sharepreferences的存放形式以及存放位置
SharedPreferences數(shù)據(jù)文件時(shí)一個(gè)根元素為<map .../>的根元素喘帚,該元素里每一個(gè)子元素代表一個(gè)key-value對(duì),當(dāng)value是整數(shù)類(lèi)型的值時(shí)使用<int .../>子元素富弦,當(dāng)value是字符串類(lèi)型是,使用<value .../>子元素……以此類(lèi)堆。存在位置在
/data/data/<package name>/shared_prefs
一開(kāi)始就聲明了此類(lèi)是不支持多進(jìn)程的,抱著前人開(kāi)荒撬即,后人乘涼的心態(tài),網(wǎng)上找了下呈队,如下:
通過(guò)查看 API 文檔發(fā)現(xiàn)剥槐,在 API Level > 11 即 Android 3.0 可以通過(guò) Context.MODE_MULTI_PROCESS 屬性來(lái)實(shí)現(xiàn)多進(jìn)程間的數(shù)據(jù)共享.但是在 API 23 時(shí)該屬性被廢棄。當(dāng)使用MODE_MULTI_PROCESS這個(gè)字段時(shí)宪摧,其實(shí)并不可靠粒竖,因?yàn)閍ndroid內(nèi)部并沒(méi)有合適的機(jī)制去防止多個(gè)進(jìn)程所造成的沖突,應(yīng)用不應(yīng)該使用它几于,推薦使用ContentProvider蕊苗。上面這段介紹我們得知:多個(gè)進(jìn)程訪問(wèn){MODE_MULTI_PROCESS}標(biāo)識(shí)的SharedPreferences時(shí),會(huì)造成沖突沿彭,舉個(gè)例子就是朽砰,在A進(jìn)程,明明set了一個(gè)key進(jìn)去喉刘,跳到B進(jìn)程去取瞧柔,卻提示null的錯(cuò)誤.參考過(guò)百度上搜索出來(lái)的SharedPreferences多進(jìn)程解決方案,比較多的都是采用ContentProvider,然后封裝一下數(shù)據(jù)庫(kù)的操作
如下:
https://blog.csdn.net/cjh94520/article/details/70880266
https://github.com/seven456/MultiprocessSharedPreferences