本来只是简单做个笔记,详细分析请点击:
https://www.jianshu.com/p/4984f66f9a4b
首先我们了解下sharepreferences的存放形式以及存放位置
SharedPreferences数据文件时一个根元素为<map .../>的根元素,该元素里每一个子元素代表一个key-value对,当value是整数类型的值时使用<int .../>子元素,当value是字符串类型是,使用<value .../>子元素……以此类堆。存在位置在
/data/data/<package name>/shared_prefs
一开始就声明了此类是不支持多进程的,抱着前人开荒,后人乘凉的心态,网上找了下,如下:
通过查看 API 文档发现,在 API Level > 11 即 Android 3.0 可以通过 Context.MODE_MULTI_PROCESS 属性来实现多进程间的数据共享.但是在 API 23 时该属性被废弃。当使用MODE_MULTI_PROCESS这个字段时,其实并不可靠,因为android内部并没有合适的机制去防止多个进程所造成的冲突,应用不应该使用它,推荐使用ContentProvider。上面这段介绍我们得知:多个进程访问{MODE_MULTI_PROCESS}标识的SharedPreferences时,会造成冲突,举个例子就是,在A进程,明明set了一个key进去,跳到B进程去取,却提示null的错误.参考过百度上搜索出来的SharedPreferences多进程解决方案,比较多的都是采用ContentProvider,然后封装一下数据库的操作
如下:
https://blog.csdn.net/cjh94520/article/details/70880266
https://github.com/seven456/MultiprocessSharedPreferences