前言:工作需要接触到了数据库观察者模式,ContentObserver我继续我以我上个SQL简介为例讲解进程之间数据改变通知与接收。
附件:http://blog.csdn.net/qq_34071798/article/details/53143354【SQL简介】
ContentObserver内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器,相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。
使用方法:
服务端:在增删改查相应的方法中调:
getContext().getContentResolver().notifiChange(Uri,null);该方法回触发ContentObserver的Onchange()方法。
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
SQLiteDatabase db = mySqlOpenHelper.getWritableDatabase();
getContext().getContentResolver().notifyChange(uri, null);
switch (sUriMatcher.match(uri)) {
case STUDENT:
db.insert(MySQLiteOpenHelper.TABLE_STUDENT, null, contentValues);
break;
default:
break;
}
return null;
}
客户端:代理类继承ContentObserver重写onChange()在其中做一些逻辑处理,一般我们会在这个方法区内用ContentObserver构造函数传来的Handler来进行Ui操作。
package com.example.sqlclienttextdemo;
import android.database.ContentObserver;
import android.os.Handler;
public class ClientObserver extends ContentObserver{
private Handler mHanlder;
public ClientObserver(Handler handler) {
super(handler);
mHanlder = handler;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
mHanlder.sendEmptyMessage(0);
}
}
只是简单的收到Onchange()回调时发送了一个消息
主Activity中通过:
getContentResolver().registerContentObserver(Uri,false/true[false只观察与这绝对匹配的Uri,true是只观察其子类变化])
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getContentResolver().registerContentObserver(uri, false, new ClientObserver(mHandler));
}
private static final Uri uri = Uri.parse("content://"+"com.example.sqldatabasetextdemo/student");;
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Toast.makeText(MainActivity.this, "sssssss", Toast.LENGTH_LONG).show();
};
};
上面只是做了一个主线程Toaster提示,可以根据需要做一些主线程的UI操作。
使用方法:
1,先启动服务端APP,进行增删改查等操作。
2,启动客户端APP也就是有观察服务端的APP,就会收到客户端的改动回调
注:如果对观察者模式感兴趣码友请关注我下一篇,观察者模式分析。