使用Observer模式进行传递
三个主要类:Observer、Subject、TestObServernotice
/** * 作者:created by meixi * 邮箱:[email protected] * 日期:2018/8/29 16 */ public interface Observer { void update(int intparam, Bitmap param); } 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
public interface Subject { /** * 注册一个观察者 */ void addObserver(Observer observer); /** * 删除一个观察者 * * @return 是否删除成功 */ boolean removeObserver(Observer observer); /** * 通知所有的观察者 * * @param id 对应观察者的id */ void notifyObserver(int id,Bitmap param); }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
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,Bitmap 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,Bitmap param) { imageView.setImageBitmap(param); } };
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,mBitmap);