首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Otto事件总线没有从一个活动触发到另一个带有片段的活动。

Otto事件总线没有从一个活动触发到另一个带有片段的活动。
EN

Stack Overflow用户
提问于 2017-02-16 17:05:16
回答 1查看 1.2K关注 0票数 1

我对使用事件总线并不陌生,但在下面的场景中我发现了一些奇怪的行为:

我有MainActivity,它有两个片段,需要使用从MainActivity启动的SecondActivity的Otto事件总线来更新它们的内容。问题是,当SecondActivity启动时,MainActivity暂停,因此,总线将在其onPause方法中未注册,而当EventBus从SecondActivity启动事件时,MainActivity下的两个片段将不会接收到它。

顺便说一句,MainActivity有一个订阅者方法来接收来自AsyncTask线程的更新,因此它也应该注册和注销事件总线。

下面是我的BusProvider类代码:

代码语言:javascript
复制
public class BusProvider {

   private static final Bus BUS = new Bus(ThreadEnforcer.ANY);

   public static Bus getInstance() {
       return BUS;
   }

   private BusProvider() {
   }
}

下面是我的MainActivity事件总线代码:

代码语言:javascript
复制
@Override
protected void onResume() {
    super.onResume();
    bus.register(this);
}

@Override
protected void onPause() {
    super.onPause();
    bus.unregister(this);
}

@Subscribe
public void onAsyncResult(SomeEvent event) {
    // do something
}

下面是我的FragmentA和FragmentB事件总线代码:

代码语言:javascript
复制
@Override
protected void onResume() {
    super.onResume();
    bus.register(this);
}

@Override
protected void onPause() {
    super.onPause();
    bus.unregister(this);
}

@Subscribe
public void onValueUpdate(UpdateEvent event) {
    mTvValue.setText(event.value);
}

现在,我需要从SecondActivity中更新这两个片段中的代码:

代码语言:javascript
复制
BusProvider.getInstance().post(new UpdateEvent("Value Updated!"));

发生的事情是UpdateEvent从SecondActivity发出,但没有被A和B两个片段所接收。

如有任何有帮助的答案,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 18:21:50

正如你正确指出的那样:

问题是,当SecondActivity启动时,MainActivity暂停了,因此,总线将在其onPause方法中被取消注册。

一旦启动onPause,您的片段的SecondActivity方法就会被执行,导致它们从事件总线中注销。因此,您需要将寄存器和取消寄存器分别移动到onCreate和onDestroy中,分别为

FragmentA和FragmentB事件总线代码应该是:

代码语言:javascript
复制
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    bus.register(this);
}

@Override
public void onDestroy() {
    super.onDestroy();
    bus.unregister(this);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42280375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档