关于Android中ContentResolver设计的一点思考

Android ContentResolver.query 是通过AIDL将Cursor对象传递给查询者。
好奇者发问:
为什么不是直接将一个list返回给用户呢?因为每次调用几乎所有查询者都是将Cursor中的数据传递给了list。不能直接返回个list么,返回Cursor有啥好处?
思考:
1.如果返回的是list,那么这个List的数据量是不可控的。有时候查询的时候是查的一整张表,成千上万条数据并且各个字段内的数据量都有可能很大。那么返回的数据量超限制很有可能在传输过程中引发异常。
2.那么Cursor返回的数据量不是一样大或者更大么?
我们从Cursor这个名字可以知道是个游标,不是内容的容器。字面意思是我们可以通过它查找某条数据。查看源码它的常用方法MovetoNext等均是通过AIDL进行远程调用。也就是说我们实际上还是通过AIDL一条数据一条数据返回,而不是一次性得到全部查询数据了。这些查询数据仍然处于服务端(remote)。也正是这样,遍历完cursor后调用close通知服务及时释放remote端资源。
3.由此提示我们AIDL的使用要注意参数和返回的量。如果数据量大,需要另外通过接口进行多次访问远端来实现。

Cursor其他详情参考:
https://blog.csdn.net/android_zyf/article/details/53420267
https://blog.csdn.net/l_215851356/article/details/70213480

猜你喜欢

转载自blog.csdn.net/panbinxian/article/details/81365782