I had same issue. Instance stayed registered in the bus in some cases. A reliable solution is to use onStart()
/onStop()
methods to register/unregister receivers. This is what Square guys suggest too. They explain it like this. If activity is in background, it does not need to refresh UI anyway, because UI is not visible. Once activity comes foreground, it will receive update and refresh UI.
Update: as mentioned in the comments, registering / unregistering in onResume()
/onPause()
can cause some undesired effects in certain cases like if there is a dialog shown over your activity, then activity gets paused and is not able to receive events anymore.