service中获取sharedpreferences数据不同步

 

在某个地方通过context获取sharedpreferences对象,并进行存储数据后,

Activity中获取的sharedpreferences存储数据和在Service中获取的sharedpreferences存储数据不一致!

 

分析:

在getSharedPreferences的时候mode使用的是MODE_PRIVATE,这种mode不支持Activity跟Service之间的数据同步,

把mode改成MODE_MULTI_PROCESS,直接可以解决Activity修改SP数据,Service可以直接同步。

 

获取SharedPreferences的两种方式:

Context 中 getSharedPreferences方法:

    public abstract SharedPreferences getSharedPreferences(String name, @PreferencesMode int mode);

    public abstract SharedPreferences getSharedPreferences(File file, @PreferencesMode int mode);

Activity对象的getPreferences()方法

    public SharedPreferences getPreferences(@Context.PreferencesMode int mode) {
        return getSharedPreferences(getLocalClassName(), mode);
    }

两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

PreferencesMode定义(Android 9.0)

    @IntDef(flag = true, prefix = { "MODE_" }, value = {
            MODE_PRIVATE,
            MODE_WORLD_READABLE,
            MODE_WORLD_WRITEABLE,
            MODE_MULTI_PROCESS,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface PreferencesMode {}

这四种模式代表的含义为:

MODE_PRIVATE: 默认模式,私有方式存储,创建的文件只能由调用应用程序(或共享相同用户ID的所有应用程序)访问

MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取

MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入

MODE_APPEND: 追加方式存储,高版本丢弃此模式

MODE_MULTI_PROCESS: 适用于多进程访问(适用于API <= 2.3 ,目前已被废弃,google官方推荐使用ContentProvider来实现进程间共享访问)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值