推迟事件的最佳方法?

Bil*_*Ape 6 android android-asynctask android-event

在我的小应用程序中,我从系统(不受我控制)收到一系列排队的onEventXXX().

那些onEventXXX()的时间不保证.唯一保证的是它们按照它们被放入队列的顺序被接收.

在onEventXXX()中,我必须触发一个操作(O),另一个进程(P)进行时,该操作无法启动.

但我不能放弃这个"开火行动(O)".我必须等到那个过程(P)完成,然后解雇它.

IOW,我必须排队或至少推迟"触发操作"直到该过程(P)完成.

我实现这一点的直接想法是,不是解雇操作(O),而是:

  1. 启动一次定时器,定期检查过程(P)
  2. 当计时器过去时,如果过程(P)未完成,则再次开始时间(自身).
  3. 当计时器过去时,如果过程(P)完成,则开火操作(O).

但是,知道Android的丰富性,我怀疑有一种更好的方法,已经内置到系统/ API中.

如果有更好的方法来实现上述目标,它会是什么?

kin*_*ori 3

CountDownLatch将是最好的解决方案。

我没有详细的例子,但我想你可以轻松使用它。

流程如下

  1. 定义 CountDownLatch 变量命名为闩锁
  2. 将锁存器计数设置为 1
  3. 当事件 O 收到时,创建一个新的 ThreadO。在ThreadO中,等待latch的计数达到0。
  4. 当进程P完成时,倒计时锁存器。

如果你这样编码,你可以轻松处理很多情况。

  1. 如果O先收到,则可以等到P完成。
  2. 如果先收到 P,则可以立即启动 O。
  3. 您可以使用 CountDownLatch 提供的超时功能。

我在异步单元测试中使用 CountDownLatch。您可以在这里看到我的代码:http ://kingori.egloos.com/4554640

虽然它不像你的情况,但你可以从我的代码中获取提示。另外,CountDownLatch 的 javadoc 提供了很好的示例。