假设我们的应用程序有 3 个活动:A、B 和 C。并且只有 A 注册到EventBusonStart()
并在此处取消注册,并且它有一个事件处理程序方法:在接收到事件 X 时将用户导航到 C。onStop()
onEvent(X event){...}
但请看下面不愉快的场景:
- 用户启动 A。
- 用户在 A 上启动后台操作。
- 用户通过点击 A 上的按钮导航到 B,而无需等待后台操作完成。A 将从 EventBus 中注销。
- 用户导航回 A。A 将再次注册到 EventBus。
- 在用户导航到 B 之前请求的后台操作完成,从后台触发事件 X。
- 事件 X 被传递给 A,事件处理程序 (
onEvent(X event){...}
) 立即将用户导航到活动 C。
这是一种奇怪的用户体验,我们如何避免再次注册时将事件传递给A?
一种解决方案是在 处取消正在进行的后台操作onStop()
,以使该事件永远不会被触发;但是,取消后台操作可能并不总是可行的。
我正在使用 GreenRobot 的 EventBus。