我在Android应用程序中有两个线程,一个是视图线程,另一个是工作线程。我想要做的是,睡眠工作线程,直到视图线程终止onDraw方法的处理。

我怎么能这样做?有没有等待信号或什么?

有帮助吗?

解决方案

在两个线程之间共享一个java.lang.Object,其唯一目的是告诉工作线程何时可以继续工作。每当工作线程到达应该睡眠的点时,它就会这样做:

stick.wait();

当视图线程完成onDraw工作时,它会调用:

stick.notify();

请注意视图线程拥有对象上的监视器的要求。在您的情况下,使用小型同步块执行此操作应该非常简单:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

在这些方法上查询java.lang.Object的javadoc(以及notifyAll,以防万一);他们的写得非常好。

其他提示

如果你想要一个更高级别的concurreny API(像Barriers这样的东西),你可以尝试java 5并发API的后端,它适用于java 1.3及更高版本,并且可以在Android上运行。像Object.wait / notify这样的东西可以工作,但它们可能有点简洁。

Backport-util-concurrent

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top