android content provider线程安全,使用ContentProvider,多线程app取到值不一致

本文介绍了在Android中遇到ContentProvider数据在多线程环境中不一致的问题,分析了原因,即SharedPreferences在不同进程中访问可能导致数据不一致。通过将所有读写操作改为通过ContentProvider进行,成功解决了这个问题。文中提供了具体的代码示例,展示了如何使用ContentResolver进行查询和更新操作。
摘要由CSDN通过智能技术生成

在安卓中四大组件之一ContentProvider进程就不一致,于是我就改自己这边逻辑,也取和改数据通过我的大家一定不陌生,我最近在优化自己的模块时发生一个BUG,我是提供Provider数据的app,但是其他来取我数据的app和我保存的值不一样。

后来发现因为我是用SharedPreferences+ContentProvider的方式存储数据提供给各个APP的,原来我的主程序代码和Provider在一个进程下,但调我Provider的APP太多了,导致我的程序即使退出在后台也占用内存不会杀死,于是把Provider独立了另一个进程,于是主进程就能释放内存了。但是引起了以上问题。

经过查了很多文章,推敲应该是由于SharedPreferences在多线程下的确会取得数据不一致,看到一个大佬的回答有所启发。我以前取数据都是直接从自己目录下SharedPreferences里拿的,那进程就是我主程序的进程,和提供其他APP数据的Provider进程就不一致,于是我就改自己这边逻辑,也取和改数据通过我的Provider来操作,终于解决了这个问题。

public static UserInfoBean getLoginedUserInfo () {

UserInfoBean userInfo = null;

ContentResolver cr = UcApp.sCtx.getContentResolver();

Cursor cursor = cr.query(Const.URI.USER_INFO,

null, null, null, null);

if ( null == cursor ) {

LogUtils.w("

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值