Ely*_*lye 4 android android-activity greenrobot-eventbus
我使用EventBus(GreenRobot)从backgroundThread发布到我的活动(这是一个UiThread).我可以开始片段等.我也想更新我的标题,所以我做了如下.(调用Activity setTitle())
@Subscribe
public void onEvent(AuthenticationEvent event) {
setTitle(event.getTitle());
}
Run Code Online (Sandbox Code Playgroud)
但是,如下所示,存在错误.(应用程序没有崩溃,但错误清楚地显示在日志中,并且工具栏标题在此之后表现得很奇怪).
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)
Run Code Online (Sandbox Code Playgroud)
有没有办法解决它,EventBus的帖子仍然允许我更新我的Ui(例如标题)?
Cha*_*hai 15
您只能从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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |