4.6. Content Providers
4.6.Content Providers
图 4.4. Content Provider
Content Provider是应用程序之间共享数据的接口。Android默认使每个应用程序都运行在沙盒(sandbox)里面,自己的数据与外面的程序完全隔离,要传递数据则必须依赖一些特定的接口。少量数据通过Intent传递即可,要传递大量的持久化数据就需要Content Provider了。为此,Content Provider提供了一套很好的按照CRUD原则设计的接口,以供不同程序之间共享数据,如图4.4 Content Provider。
Android将这种机制应用到了方方面面。比如Contacts Provider专为不同的应用程序提供联系人数据,Settings Provider专为不同的应用程序提供系统的配置信息,Media Store为不同的应用程序提供多媒体信息(比如图片、音乐)的存储与分享,等等。
以联系人应用来说,应用程序本身并没有联系人数据,Contacts Provider则没有用户界面。如图4.5. 从Contacts Provider获取数据的联系人应用,可见联系人应用通过Contacts Provider,从另一个应用程序中获取联系人数据的方法。
图4.5 从Contacts Provider获取数据的联系人应用
把数据的存储与用户界面分离开来,这使得系统中各个部分之间的联系更加紧密,拆换起来也更加灵活。比如用户可以安装一个新的地址薄应用(Address Book App)替换掉原先的默认的联系人应用(Contacts App),同时仍希望使用原先的数据;或在主屏幕上面安装一个小部件,方便做些开关WiFi/蓝牙/GPS之类的系统设置。也有许多手机制造商(比如HTC Sense)基于Content Provider机制,设计一套自己的软件集来提升用户体验。
Content Provider的接口很简单,那就是insert()、update()、delete()与query()。这与一个数据库的接口很相似,因此针对某数据库实现一个Content Provider当作代理也十分简单。话虽这么说,不过你该更喜欢使用现成的Content Provider,而不是自己造轮子。