EventBus умножает сообщения на количество действий

Я использую greenrobot EventBus и не совсем понимаю, как его использовать.

В моем приложении у меня есть 4 действия: MainActivity и 3 других. Каждая активность имеет свою роль в приложении, а MainActivity поддерживает соединение через COM-порт и отправляет/получает сообщения. Таким образом, когда сообщение получено, оно отправляется через EventBus в текущую рабочую активность. И когда другой активности нужно отправить сообщение на COM-порт, она также отправляет сообщение в MainActivity через EventBus. Проблема в том, что когда я работаю в одной активности - все работает нормально, но когда я пытаюсь что-то сделать в других активностях - дублируются сообщения от 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));

И поймать событие из других действий в MainActivity

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEventFromIntent(MessageEventFromIntent event)
    {
     //code to do when get message from intent
    }

Как видите, я отменяю регистрацию onPause() и регистрирую onResume(), но когда я закрываю это действие и запускаю его снова, сообщения дублируются.

Пример:

1-е использование:

    55017031011_TURN_STRAIGHT27

2-е использование:

    55017031011_TURN_STRAIGHT2755017031011_TURN_STRAIGHT27

Я прочитал вопросы gitHub, но не нашел ответа.

И простите за ошибки.


person Mattue    schedule 21.06.2017    source источник
comment
Я подозреваю, что проблема в том, что когда я открываю Activity и пытаюсь отправить сообщение, он создает новый объект MessageEventFromIntent с помощью нового метода MessageEventFromIntent, а не удаляет его при закрытии Activity.   -  person Mattue    schedule 21.06.2017
comment
Поэтому мне нужно сделать нулевую ссылку на этот объект, чтобы сборщик мусора мог его удалить. Но как? Отменить регистрацию MainActivity из события MessageEventFromIntent после закрытия Activity?   -  person Mattue    schedule 21.06.2017
comment
Да, конечно проблема! Только что проверил с HPROF Viewer Display. Снимок экрана   -  person Mattue    schedule 21.06.2017


Ответы (1)


Отменить регистрацию MainActivity из MessageEventFromIntent события после закрытия действия.

person Mattue    schedule 11.11.2020