【问题标题】:Event Bus not received未收到事件总线
【发布时间】:2020-10-28 15:51:24
【问题描述】:

我正在尝试使用 Otto Event Bus 将一个事件从 SplashActivity 传递到 LoginActivity,后者是 2 o 3 个活动,稍后会使用:

SplashActivity

@Override
    public void onStart() {
        super.onStart();
        BusProvider.getInstance().register(this);

        if(UtilityManager.isAppOpenedFromNotificationTap(this)){
            BusProvider.getInstance().post(new AppOpenedFromNotificationClickEvent());
        }
        
    }

    @Override
    public void onStop() {
        super.onStop();
        BusProvider.getInstance().unregister(this);
    }

我正在获得价值:

登录活动

@Override
    public void onStart() {
        super.onStart();
        BusProvider.getInstance().register(this);

    }

    @Override
    public void onStop() {
        super.onStop();
        BusProvider.getInstance().unregister(this);
    }

@Subscribe
    public void onAppOpenedFromNotificationEvent(AppOpenedFromNotificationClickEvent event) {
        Log.e("LOGIN", "ARRIVED" );
        appOpenedFromNotification = true;
    }

我放入订阅中的这些日志永远不会显示。什么问题?

【问题讨论】:

  • SplashActivity 发送事件时是否可能还没有创建(并启动)LoginActivity;在这种情况下,LoginActivity 尚未注册,因此永远不会收到事件。
  • 可能,我需要重新考虑流程。
  • 如果您想稍后处理该事件或准备好在您的登录活动中准备好组件时被拾取,您可以创建一个足以满足 @987654321 的粘性事件@

标签: android event-bus otto


【解决方案1】:

使用粘性事件

用于发送

EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));

用于接收

// UI updates must run on MainThread
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {   
    textField.setText(event.message);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多