ljq869115191
钢镚—
采纳率20%
2017-06-23 02:54

Android 使用 sharedPreferences

已采纳

本地储存了一个 boolean 变量
开启了 一个 Service 一直在 读取这个boolean 比如我一直读取的是 true;
我在Activity 中更改 这个 boolean 为 false 但是 服务中查询出来还是 为 true;
MODE 我设置的 MODE_PRIVATE,MODE_MULTI_PROCESS,MODE_APPEND
这三种 都不起作用!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

13条回答

  • stven_king 静默加载 4年前

    SharedPreferences属于操作的是xml文件需要耗时的,service轮训去校验这个值导致其他线程对SharedPreference的操作受阻。commit方法是有返回值的,看看是否修改成功。
    另外利用SharePreferences来实现多线程之间的通讯很不优雅。。。可以利用发通知等方法实现。

    点赞 1 评论 复制链接分享
  • dongfeng9ge 东风玖哥 4年前

    很明显你忘了commit

    点赞 评论 复制链接分享
  • say_from_wen say_from_wen 4年前

    首先 你的问题和mode没关系 你可以打下断点 看看你写的代码执行了吗

    点赞 评论 复制链接分享
  • say_from_wen say_from_wen 4年前

    首先 这个跟MODE 是没有关系的,可以打断点看你设置为false的代码执行了吗?再取找其他问题。

    点赞 评论 复制链接分享
  • ljq869115191 钢镚— 4年前

    谢谢 各位了! sharedPreferences 我是规范 使用的! 原因可能出现与 我在服务中 轮询 导致线程冲突!
    之前的问题! 我自身做了一些优化! 不再使用 sharedPreferences 使用 广播和回调! 完美解决。

    点赞 评论 复制链接分享
  • zanjiaowei smile_邝野 4年前

    你在服务中获取的sharedPreferences 的key对吗?

    点赞 评论 复制链接分享
  • lyj707107312 lyj707107312 4年前

    在服务中获取需要这行代码(editor = sharedPreferences.edit();实例化代码!)干什么???
    是每次轮询都实例化sharedPreferences ,还是只实例化一次多次轮询

    点赞 评论 复制链接分享
  • zengxianzi 昭杏之念 4年前

    点赞 评论 复制链接分享
  • zengxianzi 昭杏之念 4年前

    看下有没有调edit.commit(),在service是开了线程一直获取吗,在acitivty更改是否是在获取之前,获取和设置的key和sharedPreferences的名字有没有对应上

    点赞 评论 复制链接分享
  • ljq869115191 钢镚— 4年前

    这是更改的时候的地方 在 Fragment里面
    !这是在服务中获取 值的 代码! 大家帮忙看看!
    sharedPreferences = UpLoadService.this.getSharedPreferences(ShareName, UpLoadService.MODE_MULTI_PROCESS);
    editor = sharedPreferences.edit();实例化代码!

    点赞 评论 复制链接分享
  • zanjiaowei smile_邝野 4年前

    在Activity 中更改后需要保存到sharedPreferences,我猜你用的时候是直接读的sharedPreferences

    点赞 评论 复制链接分享
  • qq_21206775 qq_21206775 4年前

    你确定你有edit.commit(); 这句话看你有没写?

    点赞 评论 复制链接分享
  • HuoHao_Blogs huohao-nicole 4年前

    从你的叙述中我感觉好像不应该

    点赞 评论 复制链接分享

相关推荐