1.首先定义观察者
/**
* 观察者
*/
public interface ObServer {
//观察数据
void update(String data);
}
2.定义操作观察者的对象
public class ObserverObject {
private static volatile ObserverObject sinstance = null; // <<< 这里添加了 Appsinstance
private static CommonObservable<ObServer> applicationSubject;
public CommonObservable<ObServer> getObserviceSubject() {
if(applicationSubject == null) applicationSubject = new CommonObservable<>();
return applicationSubject;
}
/**
* 初始化类
* @return
*/
public static ObserverObject getSdkInstance() {
ObserverObject inst = sinstance; // <<< 在这里创建临时变量
if (inst == null) {
synchronized (ObserverObject.class) {
inst = sinstance;
if (inst == null) {
inst = new ObserverObject();
sinstance = inst;
}
}
}
return inst; // <<< 注意这里返回的是临时变量
}
}
3.设置观察者的操作
public abstract class Observable<T> {
public final ArrayList<HashMap<String, T>> obserList = new ArrayList<HashMap<String,T>>();
/* 添加观察者 包括名称及本生 */
public void attachObserver(String obName, T ob) {
if(obName == null || ob == null) throw new NullPointerException();
synchronized(obserList) {
HashMap<String, T> map = new HashMap<String, T>();
map.put(obName, ob);
int index = obserList.indexOf(map);
if(index == -1) {
obserList.add(map);
}
}
}
/* 删除观察者 */
public void detachObserver(String obName) {
if(obName == null) throw new NullPointerException();
synchronized(obserList){
Iterator<HashMap<String, T>> iteratorMap = obserList.iterator();
while(iteratorMap.hasNext()) {
Iterator<Entry<String, T>> iterator = iteratorMap.next().entrySet().iterator();
while(iterator.hasNext()){
if(iterator.next().getKey().equals(obName)){
iteratorMap.remove();
break;
}
}
}
}
}
/** detach all observers */
public void detachObservers() {
synchronized(obserList) {
obserList.removeAll(obserList);
}
}
/** Ruturn the size of observers */
public int countObservers() {
synchronized(obserList) {
return obserList.size();
}
}
public abstract void notifyObserver(String data);
public abstract void notifyObserver(String obserName, boolean flag, String s);
}
4.实现
public class CommonObservable<T extends ObServer> extends Observable<T> {
/** 实现抽象方法通知观察者,
* 第一个参数为观察者名字,
* 第二个参数flag标志表示如果没有找到观察者是否通知其他所有观察者(true是false否),
* 第三个为需要传递的参数
*/
String test="";
@Override
public void notifyObserver(String obserName, boolean flag, String s) {
// TODO Auto-generated method stub
if(obserName != null && !(obserName instanceof String)) return;
for(HashMap<String, T> map : obserList){
if(map.containsKey(obserName)) {
((T)map.get(obserName)).update(s);
test=s;
break;
}
}
if(flag) {
for(HashMap<String, T> map : obserList){
Iterator<Entry<String, T>> iterator = map.entrySet().iterator();
((T)iterator.next().getValue()).update(s);
}
}
}
/**
* 通知观察者内容
* 通知内容为data,String类型
* @param data
*/
@Override
public void notifyObserver(String data) {
// TODO Auto-generated method stub
for(HashMap<String, T> map : obserList){
Iterator<Entry<String, T>> iterator = map.entrySet().iterator();
((T)iterator.next().getValue()).update(data);
}
}
}
使用示例
通过下列操作绑定观察者
ObserverObject sdk = ObserverObject.getSdkInstance();
obserSubjet = sdk.getObserviceSubject();
obserSubjet.attachObserver("TransferJetSdk", (ObServer) this);
发送消息
if (obserSubjet != null) {
obserSubjet.notifyObserver("StopService");
}
解绑
obserSubjet.detachObserver("TransferJetSdk");
接收数据
public class TransferJetSdk implements ObServer {
@Override
public void update(String data) {
TjetLog.e("obj", "---------" + data);
}
}
即可实现EventBus的基础功能