简述ContentProvider多进程通信

    ContentProvider的底层实现是Binder,所以ContentProvider的6个方法都是运行在ContentProvider所在应用的进程中,其中,除了onCreate由系统回调并运行在主线程里,其他五个方法均由外界回调并运行在Binder线程池里。外界每调用一次提供器的方法都会独自开启一个线程。


    ContentProvider主要以表格的形式来组织数据,并且可以包含多个表,和数据库很相似。

    在manifest文件里注册提供器时,使用属性 android:authorities="包名.provider" 来唯一指定提供器,name属性用来指定java文件,一般还使用permission属性来指定访问权限,其中可以细分为readPermission和writePermission。

    

    让ContentProvider也实现数据改变时通知其使用者,需要先让使用者通过ContentResolver的registerContentObserver来注册,然后ContentProvider使用notifyChange方法来通知外界数据改变,最后使用者通过unregisterContentObserver解除观察者模式。

    如果ContentProvider的底层数据是数据库,可以不用考虑同步问题,但是如果底层是内存数据,比如List,则必须做同步处理。


    如果是调用查询方法,记得在使用完Cursor后关闭Cursor实例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值