简述
Provider 和Resolver是一对组合,它实现的基础是数据库,数据库是私用的,为了程序之间,或者进程间共享数据,需要一套机制把数据库的数据共享出来,ContentProver和ContentResolver应势而生,数据的管理交给数据库,它只解决进程或者是应用程序间共享访问需要解决的问题。
它是服务/客户端的模式,ContentResolver运行在客户端中,像一个代理,负责与运行Provider的进程沟通。
数据的存储
虽然ContentProvider把数据的管理交给了数据库,但是我们还是要知道数据的结构是什么样的,ContentProvider的底层数据呈现出表格的结构,一行是一条数据,一行数据分成多个段,每一段都是数据的一个属性。虽然Provider的数据_ID不是必须的,但是要和ListView绑定必须要有_ID。
访问ContentProvider
前面也说过ContentProvider和ContentResolver是一套工具,其实这套工具也是Activity的一部分,我们可以直接在Activity的代码中调用getContentResolver()来取得这套工具。
public ContentResolver getContentResolver ()
getContentResolver返回的对象就是ContentResolver,查询的时候调用ContentResolver的query函数,ContentResolver调用ContentProvider的query函数,剩下的事情就是ContentProvider与数据库的事,我们不用管了,结果肯定是要返回过来的。我们直接用就行。
query的参数和数据库的select的差别很相似,基本是一一对应的。比如query的第一个参数需要一个Uri,这个参数相当于SELECT的database name.