创建一个回调处理程序以通知Android中的多个侦听器

时间:2013-05-20 14:17:40

标签: java android

我有一个Android应用程序,通过供应商提供的库连接第三方硬件。当准备好处理来自硬件的数据时,库会回调我的应用程序。

由于它的设计,第三方库只对应用程序进行一次回调。但是,我的应用程序在调用回调时有一些不同的异步任务(例如,记录,更新UI显示,调用外部程序)。试图以某种方式将事件分散到不同的方法中。所以,我正在考虑在我的Application类中执行此操作:

interface MyCallback {
    public void doSomething(ArrayList<DataClass>);
}

public class MyApp extends Application {
...
private MyCallback cb; 
public void registerCallback (MyCallback callback) {
    cb = callback;
}

public methodCalledBy3rdPartyAPIOnData (ArrayList<DataClass> data){
    cb.doSomething(ArrayList<DataClass> data);
}

这可以用于单个方法调用,但是我遇到了如何为一系列回调执行此操作的问题...并确保它们被异步调用。在Android应用程序中,或者在Java中,是否存在任何用于执行此类操作的示例或最佳实践?

1 个答案:

答案 0 :(得分:10)

我会使用略微适应的Observer Pattern(改编通知新线程中的每个观察者):

您的回调处理程序是主题(即被观察):

public class Subject {
    private List<Observer> observers = new ArrayList<>();

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void notifyObservers(final Object data) {
        for (final Observer observer : observers) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    observer.notify(data);
                }
            }).start();
        }
    }

    public methodCalledBy3rdPartyAPIOnData (ArrayList<DataClass> data){
        notifyObservers((Object)data);
    }
}

每个真正的处理程序都需要实现以下接口

public interface Observer {
    public void notify(Object data);
}

通过致电subject.registerObserver(this)注册自己。