You can move bus event events to onStart() and onStop() , BUT you should know that certain methods cannot be called after onSaveInstanceState() (for example, rejecting DialogFragment will result in failure).
So, although this example was for Otto, I switched it to EventBus, and I personally have a shell that stores events while the application is paused.
public enum SingletonBus { INSTANCE; private static String TAG = SingletonBus.class.getSimpleName(); private final Vector<Object> eventQueueBuffer = new Vector<>(); private boolean paused; public <T> void post(final T event) { if (paused) { eventQueueBuffer.add(event); } else { EventBus.getDefault().post(event); } } public <T> void register(T subscriber) { EventBus.getDefault().register(subscriber); } public <T> void unregister(T subscriber) { EventBus.getDefault().unregister(subscriber); } public boolean isPaused() { return paused; } public void setPaused(boolean paused) { this.paused = paused; if (!paused) { Iterator<Object> eventIterator = eventQueueBuffer.iterator(); while (eventIterator.hasNext()) { Object event = eventIterator.next(); post(event); eventIterator.remove(); } } } }
Then in the BaseActivity class,
public class BaseActivity extends AppCompatActivity { @Override public void onPostResume() { super.onPostResume(); SingletonBus.INSTANCE.setPaused(false); } @Override public void onPause() { SingletonBus.INSTANCE.setPaused(true); super.onPause(); } }
source share