我已经进行了这项基本设置,public class Foo {
private static final Object notifier = new Object();
public static GpioCallback interrupt = pin -> {
synchronized (notifier) {
notifier.notifyAll();
}
return true;
};
public void waitForInterrupt() {
try {
synchronized (notifier) {
notifier.wait(5000);
}
Log.d("FOO", "Done.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
已从外部注册为GPIO引脚的边沿触发回调:
wait()
即使发生中断,==
的超时也总是耗尽。只有这样才能执行回调。
有没有办法在响应发生时立即执行回调,如果有,怎么做?
答案 0 :(得分:1)
你可能根本不想使用notify / wait,特别是在主线程上。
Android使用事件循环来执行诸如将结果发布到回调之类的操作。如果你在主线程上等待,你将阻止事件循环,确保你的回调永远不会被调用(并且你的应用程序通常会没有响应)。
答案 1 :(得分:0)
通过将waitForInterrupt
的调用移动到自己的线程来解决问题。之前,它由一个不同的回调函数调用,现在只需启动该线程。我猜测等待回调内部的回调是要求麻烦,也许GPIO回调只能串行执行..?