Dev/Android

[Android] EventBus 등록 에러 발생!!!

healthyryu 2016. 3. 3. 13:33

EventBus 를 TabLayout 의 Fragment 를 사용하면서 A, B, C 의 탭을 가지고 A -> C -> A 로 가면서 A Fragment에서 EventBus Register(이벤트버스 등록) 를 하면서 아래와 같은 오류가 발생했습니다.   


오류내용 : 

de.greenrobot.event.EventBusException: Subscriber class already registered to event



그래서 해석상으로는 이미 등록이 되어있어서 다시 이벤트버스를 등록하려고 시도하다가 발생하는 오류같습니다. TabLayout 으로 각각의 Fragment 로 이동을 할때 이동하기 전의 Fragment 가 Destroy 가 되지 않는것 같습니다. 그래서 아래와 같이 EventBus 가 등록되었을 경우에는 다시 등록하지 않도록 막아서 에러를 막아야하는것 같습니다.


http://stackoverflow.com/questions/30135367/greenrobot-eventbusexception-subscriber-class-already-registered-to-event-class


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


2016/03/03 까지는 저 위에만이 답이라고 생각했지만, 훌륭한 사수의 도움을 얻어서 알게된 점이 Fragment의 생명주기이였습니다. Fragment의 생명주기를 보면 onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach() 를 확인할 수 있습니다. 그래서 Fragment를 전환할때는 onDestroyView() 가 실행되는걸 확인했고, onDestroyView() 에 EventBus 를 이벤트버스 해지를 -EventBus.getDefault.unregister(); 처리를 해주면 됩니다. 그러면 이벤트가 해지 되고 다시 Fragment 를 돌아왔을때, onCreateView()가 실행되고 이벤트를 다시 등록하기에 정상적으로 작동될 것입니다.



Fragment LifeCycle



반응형