SharedPreferences在多进程中的使用的问题
来源:互联网 发布:科比本赛季数据 编辑:程序博客网 时间:2024/05/17 07:37
SharedPreferences
SharedPreferencespublic interface SharedPreferences android.content.SharedPreferencesInterface for accessing and modifying preference data returned by getSharedPreferences(String, int). For any particular set of preferences, there is a single instance of this class that all clients share. Modifications to the preferences must go through an SharedPreferences.Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage. Objects that are returned from the various get methods must be treated as immutable by the application.Note: This class does not support use across multiple processes.
看完官方的解释实在是心疼我自己好多秒………..
上面的意思是:
接口,用于访问和修改由返回偏好数据getSharedPreferences(String, int)。对于任何特定的偏好,有这个类,所有客户端共享的单个实例。修改偏好必须经过一个SharedPreferences.Editor对象,以确保优先值保持一致的状态和控制时,他们都致力于存储。个从各个返回的对象get的方法必须由应用程序被视为不可变的。
注意:此类不支持跨多个过程中使用。
哇,扎心….
在使用SharedPreference 时,有一些模式:MODE_PRIVATE 私有模式,这是最常见的模式,一般情况下都使用该模式。 MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE ,文件开放读写权限,不安全,已经被废弃了,google建议使用FileProvider共享文件。MODE_MULTI_PROCESS,跨进程模式,如果项目有多个进程使用同一个Preference,需要使用该模式,但是也已经废弃了。
官方也做了解释: Android不保证该模式总是能正确的工作,建议使用ContentProvider替代。
还有因为MODE_MULTI_PROCESS 是跨进程的,在你存储数据的时候有可能两个进程数据不同步,而且如果数据过大时,跨进程模式的流程是先load数据进行比较,如果不同的话就会重新获取大大降低了内存缓存的作用,文件读写耗时也影响了性能。
上一篇讲到了android:process属性的问题,如果你在主进程里面存储了一个数据,在另外一个加了android:process属性的activity或者其他组件下进行了数据更新,这样跨进程的更新就会失败,从而出现数据没有更新的情况。
其实如果真的要采取跨进程缓存数据,官方推荐的是采用四大组件的contentProvider
其实出现这样的问题,可以采取一个原则:确保一个文件只有一个进程在读写操作
总结:
- 不要存放大的key和value!会引起界面卡、频繁GC、占用内存等等!
- 毫不相关的配置项就不要丢在一起了!文件越大读取越慢,可以多存几个
- 读取频繁的key和不易变动的key尽量不要放在一起,影响速度。
- 不要乱edit和apply,尽量批量修改一次提交!
- 尽量不要存放JSON和HTML!
- 不要用这东西进行跨进程操作!!!
- SharedPreferences在多进程中的使用的问题
- 多进程中的SharedPreferences
- 多进程中使用SharedPreferences
- Android SharedPreferences 多进程访问问题
- 应用SharedPreferences在进程之间通信时你会遇到的问题
- 解决项目中不同进程中使用SharedPreferences存取数据不同步的问题
- 取代SharedPreferences的多进程解决方案(转载)
- 源码分析多进程下的SharedPreferences
- Android中的共享参数--SharedPreferences的使用
- 多进程开发过程中sharedpreferences 数据共享问题的解决方案——TrayPreferences
- SharedPreferences支持多进程
- SharedPreferences多进程解决方案
- SharedPreferences多进程解决方案
- 通过SharedPreferences实现进程间数据共享的问题详解
- Aandroid中的SharedPreferences使用
- android sharedpreferences使用问题
- SharedPreferences 的commit问题
- SharedPreferences被清空的问题
- 剑指offer | 训练题55:删除链表中重复的结点
- Rust: Lifetime小心要你命!
- 走向大神之路的必备git命令操作
- 关于setTimeout()方法的第一个参数是否加双引号的问题
- 古文观止卷七_五柳先生傳_陶淵明
- SharedPreferences在多进程中的使用的问题
- environment setup
- Path绘制动态的贝塞尔曲线、PathMeasure来绘制path动画
- HDFS HA 架构分析
- 拜占庭将军问题
- UDP协议接收端的基本代码
- 中断循环体(学习)
- Lucene提高搜索排名(文档域加权)
- studio 快捷键和一些啥啥啥的