android - 推迟 onEvent 的最佳方法?

标签 android android-asynctask android-event

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

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

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

但我不能就此放弃“触发操作 (O)”。我必须等到该进程 (P) 完成,然后触发它。

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

我实现这个的直接想法是,而不是触发操作 (O),我会:

  1. 启动一个一次性计时器,定期检查进程 (P)
  2. 当计时器结束时,如果过程 (P) 未完成,则重新开始计时(本身)。
  3. 当计时器到时,如果过程 (P) 完成,则触发操作 (O)。

但了解 Android 的丰富性后,我怀疑是否有更好的方法来执行此操作,该方法已内置到系统/API 中。

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

最佳答案

CountDownLatch将是最好的解决方案。

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

过程如下

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

如果您这样编写代码,您可以轻松应对许多情况。

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

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

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

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

相关文章:

android - 带有 wrap_content 的对话框 fragment 以全屏形式出现。如何使其成为布局的高度而不是全屏?

android - 从 MediaFiles 异步加载 CustomListView 中的图像

android - AsyncTask 永远不会在 onPostExecute 方法中结束

Android:处理 onClickListener 时出错

android - Android 中的自定义提醒弹出 View

android - 使用 PendingIntent 显示对话框

java - 方法开始延迟

android - 如何使用 Android 应用程序和 Node 服务器实现用户 session ?

android - 如何使用首选项 Activity 访问布局中设置的小部件

android - 从 AsyncTask 更新 UI 并正确处理屏幕旋转