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

Android Things GPIO interrupt not triggered until after wait() timeout

我已经完成了这个基本设置,interrupt 已经从外部注册为 GPIO 引脚的边沿触发回调:

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();
    }
  }
}

wait()的超时总是会耗尽,即使发生中断。然后才执行回调。

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

您可能根本不想使用 notify/wait,尤其是在主线程上。

Android 使用事件循环来执行诸如 post 结果回调之类的事情。如果您在主线程上等待,您将阻塞事件循环,确保您的回调永远不会被调用(并且您的应用程序通常会无响应)。

通过将对 waitForInterrupt 的调用移动到它自己的线程来解决。之前,它是由不同的回调函数调用的,现在只是启动线程。我猜在回调中等待回调是自找麻烦,也许GPIO回调只能串行执行..?