Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EventBus将消息乘以活动计数_Java_Android_Event Bus_Greenrobot Eventbus - Fatal编程技术网

Java EventBus将消息乘以活动计数

Java EventBus将消息乘以活动计数,java,android,event-bus,greenrobot-eventbus,Java,Android,Event Bus,Greenrobot Eventbus,我正在使用它,但对如何使用它有一些误解 在我的应用程序中,我有4个活动:MainActivity和3个other。每个活动在应用程序中都有自己的角色,MainActivity通过COM端口保持连接并发送/接收消息。所以,当收到消息时,它通过EventBus发送到当前的工作活动。当其他活动需要向COM端口发送消息时,它也会通过EventBus向MainActivity发送消息。问题是,当我在一个活动中工作时——所有的工作都很好,但当我在其他活动中尝试做一些事情时——来自EventBus的消息是双重

我正在使用它,但对如何使用它有一些误解

在我的应用程序中,我有4个活动:MainActivity和3个other。每个活动在应用程序中都有自己的角色,MainActivity通过COM端口保持连接并发送/接收消息。所以,当收到消息时,它通过EventBus发送到当前的工作活动。当其他活动需要向COM端口发送消息时,它也会通过EventBus向MainActivity发送消息。问题是,当我在一个活动中工作时——所有的工作都很好,但当我在其他活动中尝试做一些事情时——来自EventBus的消息是双重的。还有更多——当我尝试在第三个活动中工作时——消息是乘以3,以此类推

下面是一些代码:

public class ManualControl extends AppCompatActivity 
{
 @Override
 protected void onCreate(Bundle savedInstanceState) 
 {
     super.onCreate(savedInstanceState);
     //my other code here
 }

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

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

 @Subscribe(threadMode = ThreadMode.MAIN)
 public void onEvent(MessageEventFromMain event)
 {
  //code to do when get message from MainActivity
 };    

 private void sendMessage(String messageID, String messageName)
 {
     EventBus.getDefault().post(new MessageEventFromIntent(messageID, messageName));
 }
}
此方法用于从MainActivity向另一个活动发送消息

    EventBus.getDefault().post(new MessageEventFromMain(messageFromSerial));
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEventFromIntent(MessageEventFromIntent event)
    {
     //code to do when get message from intent
    }
并从MainActivity中的其他活动捕获事件

    EventBus.getDefault().post(new MessageEventFromMain(messageFromSerial));
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEventFromIntent(MessageEventFromIntent event)
    {
     //code to do when get message from intent
    }
如您所见,我正在注销onPause()和注册onResume(),但当我关闭此活动并再次启动时,消息会重复

例如:

首次使用:

    55017031011_TURN_STRAIGHT27
第二次使用:

    55017031011_TURN_STRAIGHT2755017031011_TURN_STRAIGHT27
我读过gitHub的问题,但没有找到任何答案


很抱歉出错。

在活动关闭后从
MessageEventFromIntent
事件中注销
MainActivity

在活动关闭后从
MessageEventFromIntent
事件中注销
MainActivity

我怀疑问题在于当我打开活动并尝试发送消息时它正在通过“new MessageEventFromIntent”方法创建新的MessageEventFromIntent对象,而不是在活动关闭时删除它。因此我需要对该对象进行null引用,以便垃圾收集器可以删除它。但是怎么做呢?活动关闭后,从MessageEventFromIntent事件中注销MainActivity?是的,确实有问题!刚刚检查了HPROF查看器显示。我怀疑问题在于,当我打开Activity并尝试发送消息时,它正在通过“new MessageEventFromIntent”方法创建新的MessageEventFromIntent对象,而不是在Activity关闭时删除它。因此,我需要对该对象进行空引用,以便垃圾收集器可以删除它。但是怎么做呢?活动关闭后,从MessageEventFromIntent事件中注销MainActivity?是的,确实有问题!刚刚检查了HPROF查看器显示。