Android系统源码阅读(8):Content Provider数据传输过程
该系列只记录阅读代码时遇到的问题和心得体会,具体代码讲解可以参考老罗的《Android系统源代码情景分析》,我就不班门弄斧了。我编译的AOSP版本:6.0.1_r50。
1. 用户开始查询
1. 用户调用query
函数进行查询。首先尝试获得provider,这里分为两种,先是unstable,后是stable,暂时没有分清这两者之间的区别。在尝试获取Provider的过程中,将会类似于第7篇文章中的过程。这里假设该用户已经有该provider的记录,获取过程见1.2。在取得provider后,见1.5。
2. 继续获取Provider。
3. 继续获取Provider。
4. ActivityThread将所有已经获得的Provider放在mProviderMap中。这里假设需要获取的Provider存在,返回一个IContentProvider
类型的provider,这个接口指向了Content Provider的一个Transport代理对象,即ContentProviderProxy对象。
5. 使用provider的代理进行查询。这里会创建一个BulkCursorToCursorAdaptor
对象。该版本没有创建CursorWindow