SharedPreferences更改数据后取出来的值没有更改的问题

本文介绍了解决Android应用中SharedPreferences在不同进程中同步数据的问题。通过调整SharedPreferences的模式为MODE_MULTI_PROCESS,确保了即使在多进程环境下也能正确地获取最新的Token值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SharedPreferences 取值不正确

开发中每次登录成功后都会获取一个服务器返回的Token,退出后再重新登录Token的值就会变化

我发现在一个activity中每次获取的都是上一次的值,也就是退出在登录后在这个activity中获取的值还是上一次保存的值,这样就导致出现了bug,而其他activity读取都没有问题

经过搜索一番发现我设置的SharedPreferences的mode类型是 MODE_PRIVATE,而api的解释是:MODE_PRIVATE:代表私有访问模式,在Android 2.3及以前这个访问模式是可以跨进程的,之后的版本这个模式就只能访问同一进程下的数据。

难道我这个activity是运行在其他进程,可是我并没有设置什么其他进程啊,开发时跟别的activity都是一样的,后来发现这个activity引用了第三方sdk vitamio,在manifest配置里这个activity多了一条属性
android:process=":vitamio"
android:process标签的作用是 看看api的解释:

  • 实现多进程可以通过设置service、broadcast、activity的标签android:process来实现。
  • 一般情况下启动这些组件默认是在同一个进程里运行的,如果设置了android:process标签,则会运行在其他进程里。
  • 如果android:process的value不是”:”开头,则系统里有同样名字的进程的话,会放到已存在的同名进程里运行,这样能减小消耗。
  • 如果android:process的value是以”:”开头,则启动一个名字为value的进程。

这下明白了我这个activity为什么运行在其他进程了,找到问题原因就可以更改了,由于引用了第三方的sdk sdk的demo都是那么配置的 所以我不打算去掉android:process标签,而是把SharedPreferences配置改成了
MODE_MULTI_PROCESS 允许多个进程访问同一个SharedPrecferences

问题得到解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值