使用ContentProvider和Cursor跨进程传输非数据库数据

本文介绍了如何使用ContentProvider结合Cursor实现跨进程传输非数据库数据。讲解了ContentProvider、Cursor、CursorWindow的工作原理,以及如何通过AbstractCursor自定义Cursor来分享非数据库信息。重点在于理解数据如何通过窗口共享内存传输,并提供了实现步骤。
摘要由CSDN通过智能技术生成

1.使用ContentProvider跨进程传输数据,依靠的是ContentProvider$Transport extends ContentProviderNative。ContentProvider是处理业务的核心,但是本身不具备跨进程的能力。

2.而最终需要获得数据库数据(也可以是非数据库数据),还需要其他的Binder。IBulkCursor,实际类型是CursorToBulkCursorAdapter extends BulkCursorNative。

3.查询到的数据最初是保存到Cursor中的,最后会创建一个CursorWindow,通过fillWindow方法,将Cursor中的数据放到window中,window是一块共享内存,最后通过IBulkCursor控制Cursor将数据填充到window中,然后返回window的引用给客户端。所以客户端获得的Cursor不是服务端的Cursor,而是封装了IBulkCursor的BulkCursorToCursorAdapter。

4.Cursor是用于控制获取第几行第几列的数据的存取。CrossProcessCursor的就是利用Cursor获取第几行第几列的数据的方法去填充window的:

    @Override
    public void fillWindow(int position, CursorWindow window) {
        DatabaseUtils.cursorFillWindow(this, position, window);
    }

5.如果需要自定义Cursor,只要继承AbstractCursor就行,AbstractCursor继承了CrossProcessCursor,就是有window了,就可以把数据分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值