SharedPreferences

SharedPreferences

进程取值问题

假设有两个进程A,B

  • A获取SP对象,B获取SP对象,A中SP无论怎么修改,B中SP均不会被改变;
  • A获取SP对象,修改了值,B获取SP对象,B中的SP值为获取时的最后的值,也就是A修改了之后的值;后续A的SP的任何改变,均不会影响B的SP;
  • SP的模式设置为MODE_MULTI_PROCESS,在Android 3.0以上也不行;

apply和commit区别

  • apply会将写入磁盘的任务加入到一个线程池中在后台运行;
  • commit则会在当前线程进行写入;

在这里插入图片描述

使用建议

  • 不要存放过大的key,value在SP中,会导致内存使用过大,内存使用过高会频发引发GC,导致界面丢帧甚至ANR。
  • 合理安排一个SP内存放的数据,单个文件越大则读取数独越慢。
    • 登录信息和其他的sp可以分开放。
    • 频繁读取的key和不频繁的key可以分开放
  • apply的使用也不是一定不会出问题,如果它虽然是在线程池进行的,如果在关闭Activity的时候,handleStopActivity中判断apply的操作还未做完,则有可能因为时间过长导致ANR;
  • 提前初始化 SharedPreferences,避免第一次读取时间问题。

延伸

  • 采用上述的形式进行数据存储与读取,主要还是为了防止频繁的IO读取磁盘带来的性能开销,如果实时从磁盘读取,性能上面肯定有不可忽视的影响。
  • 如果对存储的成功与否的结果并不关心的话,可选择性的使用apply。因为apply方法是在线程池进行文件的写入,而commit方法则是直接在当前线程进行文件的写入的。
  • 多进程的数据共享推荐使用ContentProvider。(MODE_MULTI_PROCESS在3.0以上已经被弃用了)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值