gpt4 book ai didi

java - 创建回调处理程序以通知 Android 中的多个监听器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:35 24 4
gpt4 key购买 nike

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

由于其设计,第 3 方库仅对应用程序进行一次回调。但是,我的应用程序有几个不同的异步任务,它希望在调用回调时执行这些任务(例如,记录日志、更新 UI 显示、调用外部程序)。尝试以不同的方式将事件分散开来。所以,我正在考虑在我的应用程序类中这样做:

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 中执行此类操作的任何示例或最佳实践?

最佳答案

我会使用稍微改编的 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);
}
}

而每一个真正的handler都需要实现下面的接口(interface)

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

并通过调用 subject.registerObserver(this) 注册自己。

关于java - 创建回调处理程序以通知 Android 中的多个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com