android 未收到绿色机器人事件总线事件

bkhjykvo  于 2023-01-03  发布在  Android
关注(0)|答案(5)|浏览(141)

我使用Greenrobot EventBus将事件从一个活动传递到另一个活动。
流程大致如下:活动1开始-〉扫描条形码-〉活动2开始-〉接受或拒绝响应并向活动1发送事件。
因此,练习2通过执行以下操作向练习1发送一个新事件:

@Override
public void onCreate(){
  EventBus.getDefault().register(this);
  // other initialization code
  EventBus.getDefault().post(new MyEvent());
}

在练习1中,我注册了事件总线,并且使用了用于接收事件的公共onEvent(MyEvent myEvent)方法。
问题是onEvent没有被触发。我看了看事件总线对象可能有问题(比如不同的示例或者活动1和2中的某个),但是它; It“是同一个例子。
我不知道问题出在哪里,如果有人能看一看,告诉我哪里做错了,我会非常感激。
谢谢!

ubby3x7f

ubby3x7f1#

在这种情况下,您可能需要使用粘滞事件。当Activity1启动Activity2后,它将进入后台,并且不再接收任何事件。
将其放入活动1中,而不是EventBus. getDefault(). register(对象事件)

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().registerSticky(this);
}

并取代了

EventBus.getDefault().post(new MyEvent());

在练习2中

EventBus.getDefault().postSticky(new MyEvent());

Here is a link to the documentation explaining it

qlzsbp2j

qlzsbp2j2#

您的Activity1 EventBus取消注册是什么样子的?
我有同样的问题,因为我这样做:

Activity1.java

@Override
protected void onStop() {
     super.onStop()
     EventBus.getDefault().unregister(this);
}

这样做的问题是,当您启动Activity2时onStop会得到调用,因此会删除对事件的订阅。我可以通过将取消注册移动到onDestroy来解决这个问题,因此:

Activity1.java

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
cgvd09ve

cgvd09ve3#

分类测验

public class TestEventBus {

private String label;

public String getLabel() {
    return label;
}

public void setLabel(String label) {
    this.label = label;
}
}

活动A**

TestEventBus t = new TestEventBus();
t.setLabel("oi");
EventBus.getDefault().post( t );

活动B

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(TestEventBus test) {

Toast.makeText(this, "label "+test.getLabel(), 
Toast.LENGTH_SHORT).show();

};

@Override
public void onStart() {
  super.onStart();
  EventBus.getDefault().register(this);
}

@Override
public void onStop() {
  super.onStop();
  EventBus.getDefault().unregister(this);

 }
vlju58qv

vlju58qv4#

在接收粘滞事件的新版本中,设置sticky标志true

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
fun onNewEvent(event: MessageEvent) {
    //...
}
50few1ms

50few1ms5#

发生这种情况的原因是,在开始()时,您注册了eventBus,然后进入了下一个Activity...因此,从技术上讲,事件总线已经在上一个Activity中注册...因此,当您返回到同一个Activity时,事件总线将使应用程序崩溃,因为它已经假定您已经注册了...
因此,为了解决这个问题,尝试调用,对活动,以防止它崩溃!

@Override
public void onStop() {
  super.onStop();
  EventBus.getDefault().unregister(this);

}

相关问题