如何防止EventBus将事件传递给错误的Activity

时间:2016-01-27 10:34:08

标签: android event-bus greenrobot-eventbus

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

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

  1. 用户启动A.
  2. 用户在A。
  3. 上开始后台操作
  4. 用户通过点击A上的按钮导航到B,而无需等待后台操作完成。 A将从EventBus取消注册。
  5. 用户导航回答A. A将再次注册到EventBus。
  6. 用户导航到B之前请求的后台操作已完成,事件X从后台触发。
  7. 事件X被传递给A,事件处理程序(onEvent(X event){...})立即将用户导航到活动C.
  8. 这是一种奇怪的用户体验,我们怎样才能避免在再次注册时将事件传递给A?

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

    我正在使用GreenRobot的EventBus。

2 个答案:

答案 0 :(得分:0)

您可以使用Bus

的计数器

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

答案 1 :(得分:0)

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

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