Android事件GPIO中断直到wait()超时后才触发

时间:2018-03-20 18:04:22

标签: java callback gpio android-things

我已经进行了这项基本设置,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()

即使发生中断,==的超时也总是耗尽。只有这样才能执行回调。

有没有办法在响应发生时立即执行回调,如果有,怎么做?

2 个答案:

答案 0 :(得分:1)

你可能根本不想使用notify / wait,特别是在主线程上。

Android使用事件循环来执行诸如将结果发布到回调之类的操作。如果你在主线程上等待,你将阻止事件循环,确保你的回调永远不会被调用(并且你的应用程序通常会没有响应)。

答案 1 :(得分:0)

通过将waitForInterrupt的调用移动到自己的线程来解决问题。之前,它由一个不同的回调函数调用,现在只需启动该线程。我猜测等待回调内部的回调是要求麻烦,也许GPIO回调只能串行执行..?