0

假设我们的应用程序有 3 个活动:A、B 和 C。并且只有 A 注册到EventBusonStart()并在此处取消注册,并且它有一个事件处理程序方法:在接收到事件 X 时将用户导航到 C。onStop()onEvent(X event){...}

但请看下面不愉快的场景:

  1. 用户启动 A。
  2. 用户在 A 上启动后台操作。
  3. 用户通过点击 A 上的按钮导航到 B,而无需等待后台操作完成。A 将从 EventBus 中注销。
  4. 用户导航回 A。A 将再次注册到 EventBus。
  5. 在用户导航到 B 之前请求的后台操作完成,从后台触发事件 X。
  6. 事件 X 被传递给 A,事件处理程序 ( onEvent(X event){...}) 立即将用户导航到活动 C。

这是一种奇怪的用户体验,我们如何避免再次注册时将事件传递给A?

一种解决方案是在 处取消正在进行的后台操作onStop(),以使该事件永远不会被触发;但是,取消后台操作可能并不总是可行的。

我正在使用 GreenRobot 的 EventBus。

4

2 回答 2

0

我不确定这里的预期行为是什么,当用户在 A 并且后台任务完成时应用程序应该做什么?忽略事件?

在任何情况下,我都会使用事件负载(您可以使用自己的负载定义一个事件类)来控制工作流,例如,在处理程序中检查是否应该忽略该事件。

于 2016-01-27T11:11:58.420 回答
0

您可以使用计数器为您的Bus

例如static int,在您的活动中有一个字段,并在每次Bus为该活动注册时增加它,并且在初始化后台任务时,将该计数器传递给您的任务并在完成时将其发回。然后在您的事件处理程序中,使用您的计数器的当前值检查该值,如果它们不同,则什么也不做。

于 2016-01-27T10:50:46.623 回答