`

监测database的改变--notifyChange

阅读更多
我们在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();
        }

    }

在DownloadService的onCreate中注册:
 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
分享到:
评论

相关推荐

    Android数据库内容变化的监听

    最后,ContentResolver 类提供了 notifyChange 方法,用于通知所有注册到 Uri 的监听器,告诉他们内容发生了改变。该方法需要两个参数:Uri 和 ContentObserver。Uri 是要通知的 Uri,ContentObserver 是一个实现了 ...

    Android学习笔记 Preference的使用

    在Android开发中,Preference是用于实现用户设置界面的关键组件,它允许用户进行简单的交互,如开关按钮、选择列表等。Preference框架提供了丰富的UI元素,并且能够轻松地将用户配置保存到共享偏好设置...

    contentResolver数据库操作.docx

    - `ContentResolver.notifyChange()`:数据插入成功后,通知UI界面刷新,保持数据的一致性。 #### 三、ContentResolver 与传统数据库操作的区别 与传统的数据库操作相比,ContentResolver的最大不同之处在于它通过...

    巧用CursorLoader实时更新界面上显示的数据

    - 使用`CursorLoader`时,确保你的`ContentProvider`正确实现了`notifyChange()`方法,以便在数据改变时发送广播。 - 为了提高效率,`Cursor`应该在不使用时及时关闭,避免内存泄漏。 - 考虑到性能,不要在不需要...

    store-prototype:用于创建事件驱动的数据存储的简单类

    商店原型 用于创建事件驱动的数据存储的简单类。 使用npm install --save store-prototype从npm npm install --save store-prototype并按照以下示例使用。... this.notifyChange(); }, removeThing: function(key)

    MyBiggerPicture.rar

    这个过程可能涉及到ScaleAnimation或ObjectAnimator来改变ImageView的scaleX和scaleY属性,从而实现图片的缩放效果。 4. **图片保存到相册**: - Android提供MediaStore类,允许应用将图片保存到系统的图库。首先...

    android数据库共享技术

    getContext().getContentResolver().notifyChange(itemUri, null); return itemUri; } return null; } @Override public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] ...

    ContentObserver内容观察者

    当ContentProvider中的数据通过insert、delete或update方法发生改变时,ContentProvider会调用`getContext().getContentResolver().notifyChange(Uri uri)`来通知所有关注该数据的ContentObserver。这里的Uri参数...

    Android面试常问基础知识点.pdf

    ContentProvider 提供了一种跨进程数据共享的方式,当数据被修改后,ContentResolver 接口的 notifyChange 函数通知那些注册监控特定 URI 的 ContentObserver 对象。 如果 ContentProvider 和调用者在同一进程中,...

    contentprovider示例

    getContext().getContentResolver().notifyChange(insertedUri, null); return insertedUri; } return null; } ``` 3. 同理,实现`query()`、`update()`和`delete()`方法,根据UriMatcher返回的匹配码执行...

    contentproviderresolver.rar

    使用contentProvider 和 contentResolver 实现两个APP间数据共享,并利用 getContentResolver().notifyChange 和 ContentObserver 来实现两个app间数据同步刷新

    loadmanager和contentprovider结合加载数据

    7. 数据变更通知:在ContentProvider中,当数据发生改变时,可以通过ContentResolver的notifyChange()方法通知所有监听该URI的Loader,触发它们重新加载数据。 8. UI更新:LoaderCallbacks的onLoadFinished()方法会...

    Android ContentProvider实现手机联系人读取和插入

    - 当插入数据时,由于系统可能有缓存,建议在插入后使用`ContentResolver.notifyChange()`通知数据已更新。 以上就是使用Android ContentProvider实现手机联系人读取和插入的核心知识,开发者可以根据这些原理进行...

    内容观察者模式运用

    内容观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在IT行业中广泛应用,特别是在处理实时数据更新、事件监听和...

    ZK框架开发手册

    手册中阐述了ViewModel中的初始化、数据和集合的操作,以及如何在ViewModel中使用@Init、@AfterCompose、@NotifyChange等注解来控制数据的更新。 ZK框架还提供了多种内置的Model组件,例如ListModel、ModelGroups、...

    Android装载器的使用

    4. **Loader的更新**:当ContentProvider中的数据发生变化时,可以通过`getContext().getContentResolver().notifyChange(uri, null)`通知所有监听该Uri的Loader重新加载数据。 通过以上步骤,你可以有效地利用...

    MidnightMonitor

    要使用`CEnvironmentChangeNotifier`,首先需要创建一个继承自`MEnvironmentChangeObserver`的类,实现其`NotifyChange()`方法。当环境发生变化时,系统会调用这个方法。接着,创建`CEnvironmentChangeNotifier`的...

    基于Android 监听ContentProvider 中数据变化的相关介绍

    首先,当ContentProvider中的数据发生变化时,我们可以调用`getContentResolver().notifyChange(uri, null)`来通知注册在这个URI上的观察者。这个方法会触发所有已注册的ContentObserver类的onChange回调方法。 ...

    Android数据持久化之ContentProvider机制详解

    getContext().getContentResolver().notifyChange(insertedUri, null); return insertedUri; } return null; } // 其他query(), update(), delete() 方法实现省略... } ``` 6. **权限控制**:为了安全,你还...

    Android开发实现调节屏幕亮度功能

    要改变Activity的亮度,我们可以获取到Activity的Window对象,并通过`WindowManager.LayoutParams`的`screenBrightness`属性设置新的亮度值。这里的亮度值是一个浮点数,范围在0到1之间,然后乘以255得到实际的亮度...

Global site tag (gtag.js) - Google Analytics