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

不能保证这些onEventXXX()的时间。唯一可以保证的是,将它们以顺序的顺序接收,并按顺序放入队列中。

在onEventXXX()内部,我必须在正在进行另一个进程(P)的情况下触发无法启动的操作(O)。

但是我不能仅仅丢弃这个“触发操作(O)”。我必须等到该过程(P)完成,然后将其解雇。

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

我实现此目标的直接想法是,而不是触发操作(O),我将:

  • 启动一个计时器,该计时器将定期检查进程(P)
  • 经过计时器后,如果进程(P)未完成,请重新开始计时(本身)。
  • 经过计时器后,如果进程(P)完成,则触发操作(O)。

  • 但是,由于知道Android的功能,我怀疑已经有更好的方法做到这一点,它已经内置在系统/API中。

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

    最佳答案

    CountDownLatch将是最好的解决方案。

    我没有详细的示例,但我认为您可以轻松使用它。

    过程如下

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

  • 如果您这样编写代码,则可以轻松处理许多情况。
  • 如果O首先收到,则可以等到P完成。
  • 如果首先收到P,则可以立即开始O。
  • 您可以使用CountDownLatch提供的超时功能。

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

    尽管这与您的情况不同,但是您可以从我的代码中获取提示。另外,CountDownLatch的javadoc提供了很好的示例。

    关于android - 推迟 Activity 的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9945900/

    10-10 20:01