内容观察者

Posted SoulCode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内容观察者相关的知识,希望对你有一定的参考价值。

#内容观察者(掌握)
* 当数据库数据改变时,内容提供者会发出通知,在内容提供者的uri上注册一个内容观察者,就可以收到数据改变的通知
 
cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
 
class MyObserver extends ContentObserver{
 
public MyObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
 
//内容观察者收到数据库发生改变的通知时,会调用此方法
@Override
public void onChange(boolean selfChange) {
 
}
 
}
 
部分代码:
package com.itheima.contentobserver;
 
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.view.Menu;
 
public class MainActivity extends Activity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
//注册内容观察者,观察者就生效了,可以接受内容提供者发出的通知
ContentResolver resolver = getContentResolver();
//arg0:指定接收哪个内容提供者发出的通知
resolver.registerContentObserver(Uri.parse("content://sms"),
true, //如果为true,以这个uri作为开头的uri上的数据改变了,该内容观察者都会收到通知
new MyObserver(new Handler()));
}
 
class MyObserver extends ContentObserver{
 
public MyObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
 
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
System.out.println("短信数据库改变");
}
}
 
}

以上是关于内容观察者的主要内容,如果未能解决你的问题,请参考以下文章

LiveData 没有观察具有共享视图模型的子视图页面片段

如何让自定义视图观察包含片段的生命周期事件而不是活动?

从没有中间转换变量的片段中观察 ViewModel LiveData

golang 转到片段以观察运行时行为和内存分配

常用python日期日志获取内容循环的代码片段

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)