在我的小应用程序中,我从系统(不受我控制)收到一系列排队的onEventXXX().
那些onEventXXX()的时间不保证.唯一保证的是它们按照它们被放入队列的顺序被接收.
在onEventXXX()中,我必须触发一个操作(O),当另一个进程(P)进行时,该操作无法启动.
但我不能放弃这个“开火行动(O)”.我必须等到那个过程(P)完成,然后解雇它.
IOW,我必须排队或至少推迟“触发操作”直到该过程(P)完成.
我实现这一点的直接想法是,不是解雇操作(O),而是:
>启动一次定时器,定期检查过程(P)
>当计时器过去时,如果过程(P)未完成,则再次开始时间(自身).
>当计时器过去时,如果过程(P)完成,则触发操作(O).
但是,知道Android的丰富性,我怀疑有一种更好的方法,已经内置到系统/ API中.
如果有更好的方法来实现上述目标,它会是什么?
解决方法
CountDownLatch将是最好的解决方案.
我没有详细的例子,但我认为你可以轻松使用它.
流程如下
>定义CountDownLatch可变命名的latch
>将锁存计数设置为1
>当收到事件O时,制作一个新的ThreadO.在ThreadO中,等待锁存器的计数达到0.
>当进程P完成时,倒计时锁存.
如果您这样编码,您可以轻松处理许多情况.
>如果O先收到,你可以等到P完成.
>如果P先收到,你可以马上开始.
>您可以使用CountDownLatch提供的超时功能.
我在asyc单元测试中使用CountDownLatch.你可以在这里看到我的代码:http://kingori.egloos.com/4554640