我有一个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中,是否存在任何用于执行此类操作的示例或最佳实践?
答案 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)
注册自己。