EventBus 发布无法更新工具栏标题。任何解决方法?

EventBus posting can't update Toolbar Title. Any workaround?

我使用 EventBus (GreenRobot) post 从 backgroundThread 到我的 activity(这是一个 UiThread)。我可以开始一个片段等。我也想更新我的标题,所以我做了如下。 (调用 Activity setTitle())

@Subscribe
public void onEvent(AuthenticationEvent event) {
    setTitle(event.getTitle());
}

但是,报错如下。 (应用程序没有崩溃,但是日志中清楚地显示了错误,之后工具栏标题表现得很奇怪)。

E/EventBus: Could not dispatch event: class package.AuthenticationEvent to subscribing class class package.MainActivity
      android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)

有什么方法可以解决这个问题,EventBus 的 post 仍然可以让我更新我的 Ui(例如标题)?

使用 @Subscribe(threadMode = ThreadMode.MAIN) 而不是 @Subscribe。参见 the delivery threads/thread mode documentation

您只能从 UI 线程更新任何 UI 组件。如果您尝试从后台线程更新 UI,它将无法工作并可能导致应用程序崩溃。

默认情况下,@Subscribe 方法将在发布线程中执行,这是您的后台线程。这就是为什么您的代码不起作用的原因。要使其工作,您必须使用 @Subscribe(threadMode = ThreadMode.MAIN) 以便它在 UI 线程中执行。对于您的特定代码:

// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(AuthenticationEvent event) {
    setTitle(event.getTitle());
}