Аварийный отказ Greenrobot, это пробел из-за жизненного цикла активности / фрагмента? - PullRequest
0 голосов
/ 23 сентября 2019

Craslythics несколько раз сообщал об этом сбое:

Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.example.myapp/com.example.myapp.view.MyFragment}: org.greenrobot.eventbus.e: Subscriber class com.example.myapp.view.MyPresenter already registered to event class com.example.myapp.event.MyEvent

Я не понимаю, как случилось, что мой класс MyPresenter уже зарегистрирован в EventBus и не знает, как воспроизвести сбой.

В MyFragment я регистрирую докладчика в onStart и отменяю его регистрацию в OnPause:

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter = new MyPresenter(this);
    }

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

    @Override
    public void onPause() {
        super.onPause();
        EventBus.getDefault().unregister(presenter);
    }

Фрагмент объявлен в XML-формате MyActivity:

<fragment
        android:id="@+id/fragment"
        android:name="com.example.MyApp.MyFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:layout="@layout/my_fragment" />

И я получаю его от менеджера поддержки фрагментов в действии onCreate:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
    }

Что я делаю не так?Как могло случиться, что функция фрагмента вызывается 2 раза без вызова onPause?

1 Ответ

0 голосов
/ 23 сентября 2019

Просто отметьте его при регистрации, он проверит, зарегистрирован он или нет

if(!EventBus.getDefault().isRegistered(this)){
      EventBus.getDefault().register(this)
  }

при отмене регистрации

if(EventBus.getDefault().isRegistered(this)){
        EventBus.getDefault().unregister(this)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...