Android基础 -- Activity之间传递数据bitmap

使用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);

猜你喜欢

转载自blog.csdn.net/meixi_android/article/details/82186415