主要三个类
1、
public interface Observer { void update(int id,String param); }
2、
public interface Subject { /** * 注册一个观察者 */ void addObserver(Observer observer); /** * 删除一个观察者 * * @return 是否删除成功 */ boolean removeObserver(Observer observer); /** * 通知所有的观察者 * * @param id 对应观察者的id */ void notifyObserver(int id,String param); }
3、
public class TestObServernotice implements Subject { private static Subject subject; private List<Observer> observers = new ArrayList<>(); private TestObServernotice() { // TODO Auto-generated constructor stub } public static Subject getInstance() { if (null == subject) { synchronized (TestObServernotice.class) { if (null == subject) subject = new TestObServernotice(); } } return subject; } @Override public void addObserver(Observer observer) { // TODO Auto-generated method stub observers.add(observer); } @Override public boolean removeObserver(Observer observer) { // TODO Auto-generated method stub return observers.remove(observer); } @Override public void notifyObserver(int id,String param) { // TODO Auto-generated method stub for (Observer observer : observers) { observer.update(id,param); } } }
观察者中注册Observer,如MainActivity中注册
private Observer deleteObserver = new Observer() { @Override public void update(int id,String param) { tomapte.setText("sssssymd"+param);//dosomething } };
TestObServernotice.getInstance().addObserver(deleteObserver);
同时注意删除观察者
@Override protected void onDestroy() { super.onDestroy(); TestObServernotice.getInstance().removeObserver(deleteObserver); deleteObserver = null; Log.v("lgq", "......11..onDestroy...."); }
调用,通知观察者,主要在receiver中调用,fragment,activity都可以调用,跨界面刷新数据
TestObServernotice.getInstance().notifyObserver(0,bundle.getString("cn.jpush.android.ALERT"));