关于service和activity交互修改sharedpreferences数据不同步的问题

来源:互联网 发布:linux 用户列表 编辑:程序博客网 时间:2024/06/06 18:42

今天做了一个demo,在service里面接收到广播之后,启动一个dialog样式的activity(每隔几秒弹出一次),dialog上有个按钮,点击之后将preference中的一个key设为false,然后service中的广播里面判断为false就不执行,但是结果是每次点击按钮修改key之后,service再次获取的key并没有做相应改变,也就是说preference存的已经变成false,但是service取出来依旧为true。

解决方法:因为我在manifest的这个service标签下加了process属性,去掉可恢复正常。

探究:有人说preference的mode问题,把private(0)改成MODE_MULTI_PROCESS(4),尝试过未能解决,根本原因还是process标签。

android:process

        服务所在进程的名字。通常,一个应用的所有组件都运行在系统为这个应用所创建的默认进程中。这个默认进程是用这个应用的包名来命名的。

        标签的process属性可以设置成和所有组件都不同的默认值。但是这些组件可以通过设置自己的process值来覆写这个默认值,这样可以让你的应用跨多进程运行。

        如果被设置的进程名是以一个冒号开头的,则这个新的进程对于这个应用来说是私有的,当它被需要或者这个服务需要在新进程中运行的时候,这个新进程将会被创建。如果这个进程的名字是以小写字符开头的,则这个服务将运行在一个以这个名字命名的全局的进程中,当然前提是它有相应的权限。这将允许在不同应用中的各种组件可以共享一个进程,从而减少资源的占用。


0 0
原创粉丝点击