我们在ContentProvider的insert,update,delete等改变之后调用getContext().getContentResolver().notifyChange(uri, null);这样就通知那些监测databases变化的observer了,而你的observer可以在一个service里面注册。
以Downloadmanger为例子:
定义ContentObserver,并且在onChange里做你想做的事情。
- /**
- * Receives notifications when the data in the content provider changes
- */
- private class DownloadManagerContentObserver extends ContentObserver {
- public DownloadManagerContentObserver() {
- super(new Handler());
- }
- /**
- * Receives notification when the data in the observed content
- * provider changes.
- */
- public void onChange(final boolean selfChange) {
- if (Constants.LOGVV) {
- Log.v(Constants.TAG, "Service ContentObserver received notification");
- }
- updateFromProvider();
- }
- }
- public void onCreate() {
- super.onCreate();
- if (Constants.LOGVV) {
- Log.v(Constants.TAG, "Service onCreate");
- }
- mDownloads = Lists.newArrayList();
- mObserver = new DownloadManagerContentObserver();
- getContentResolver().registerContentObserver(Downloads.CONTENT_URI,
- true, mObserver);
- .....}
- /**
- * Cleans up when the service is destroyed
- */
- public void onDestroy() {
- getContentResolver().unregisterContentObserver(mObserver);
- if (Constants.LOGVV) {
- Log.v(Constants.TAG, "Service onDestroy");
- }
- super.onDestroy();
- }
http://hi.baidu.com/lck0502/blog/item/a818258f304b61e0f01f3691.html