ContentProvider要点复习
ContentProvider作为四大组件之一,发挥着举足轻重的作用。与之相关联的另外两个类分别是ContentResolver和ContentObserver。
ContentProvider
内容提供者,暴露数据和操作数据的方法给外界,如联系人、短信、多媒体等数据库中的数据,是一种数据共享的方法。
使用ContentProvider需要继承该类并注册在清单文件,并且指明其authorities属性以指定外界的访问“路径”,exported属性指定是否暴露出去。
继承之后需要复写onCreate insert delete update query 等方法。其中Uri是的格式可以是
content://<authorities>/<资源>/<ID>
Android提供了管理URI的工具类UriMatcher和ContentUris。UriMatcher提供了两个常用的方法void addURI(String autority, String path, int code),int match()。ContentUris提供了withAppendedId(Uri id),paresId(uri)。
ContentProvider的生命周期只有一个方法onCreate,并且只有在第一次访问时会被回调。
ContentResolver
Context中提供了getContentResolver()方法获取ContentResolver实例,然后让调用该实例的query insert等方法进行操作,会调用到相应内容提供者的相应的方法。
ContentObserver
内容观察者,当其监听的数据发生改变的时候,会回调其中的onChange方法进行相应操作的处理。
getContentResolver().registerContentObserver(uri, new ContentObserver{
public void onChange(boolean selfChange){
// xxx
}
});
在应用层中对该组件的使用较少,也更少会用三方应用让自己的数据暴露出去。在系统层中,对内容观察者的使用不在少数,比如在设置中打开或关闭了某个开关,可能只是会更改数据库中的一个值,而并不调用framework提供的接口,然后在framework中会监听该值的变化,然后从数据库中将该值获取,然后再进行其他操作。