Android的内容观察者-----ContentObserver类

  ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器, 相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。

   熟悉Content Provider(内容提供者)的应该知道,我们可以通过UriMatcher类注册不同类型的Uri,我们可以通过这些不同的 Uri来查询不同的结果。根据Uri返回的结果,Uri Type可以分为:返回多条数据的Uri、返回单条数据的Uri。


 总结: 使用ContentObserver的情况主要有一下两者情况:

              1、需要频繁检测的数据库或者某个数据是否发生改变,如果使用线程去操作,很不经济而且很耗时 ;

              2、在用户不知晓的情况下对数据库做一些事件,比如:悄悄发送信息、拒绝接受短信黑名单等;


注册:

broadcastReplyListener = new BroadcastReplyListener(broadcastReplyHandler);
context.getContentResolver().registerContentObserver(BroadcastChat.CONTENT_URI, true, broadcastReplyListener);
注意:参数必须是传递主线程所在的handler

实现:

private final class BroadcastReplyListener extends ContentObserver 
{
    private Handler handler;
    public BroadcastReplyListener(Handler handler) 
    {
        super(handler);
        this.handler = handler;
    }

    @Override
    public void onChange(boolean selfChange,Uri uri)
    {
       String broadcastid = uri.getLastPathSegment();
       if(!TextUtils.isEmpty(broadcastid))
       {
          Message msg = handler.obtainMessage();
          msg.obj = broadcastid;
          msg.what = 0;
          handler.sendMessage(msg);
       }
    }
}
最后:在不用的时候手动注销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值