# EventBus — Publish-Subscribe Event Bus for Android and Java > A lightweight publish-subscribe event bus that simplifies communication between Android components like activities, fragments, and background threads. ## Install Save as a script file and run: # EventBus — Publish-Subscribe Event Bus for Android and Java ## Quick Use ```gradle implementation 'org.greenrobot:eventbus:3.3.1' ``` ```java // Define an event public class MessageEvent { public String text; } // Subscribe in your Activity or Fragment @Subscribe(threadMode = ThreadMode.MAIN) public void onMessage(MessageEvent event) { textView.setText(event.text); } // Register and unregister EventBus.getDefault().register(this); EventBus.getDefault().unregister(this); // Post from anywhere EventBus.getDefault().post(new MessageEvent()); ``` ## Introduction EventBus by greenrobot is a publish-subscribe library that decouples communication between Android components. Instead of passing callbacks, interfaces, or intents between activities, fragments, and services, components simply post event objects and subscribers receive them on the thread of their choice. It reduces boilerplate and coupling in Android applications. ## What EventBus Does - Decouples senders and receivers so components communicate without direct references - Delivers events to subscribers on configurable threads: main, background, async, or posting - Supports sticky events that are retained and delivered to future subscribers automatically - Provides subscriber priorities and event cancellation for ordered processing chains - Offers an annotation processor for compile-time subscriber indexing to avoid reflection overhead ## Architecture Overview EventBus maintains a registry of subscriber methods indexed by event type. When an event is posted, the bus looks up all registered subscribers for that event class (and its superclasses if configured), then dispatches the event on the thread specified by each subscriber's threadMode annotation. The optional subscriber index generated at compile time replaces runtime reflection with a precomputed lookup table. ## Setup & Configuration - Add the EventBus dependency to your module-level build.gradle - Annotate subscriber methods with @Subscribe and specify a threadMode - Register the subscriber in onStart or onCreate and unregister in onStop or onDestroy - Enable the subscriber index by adding the EventBus annotation processor for faster startup - Configure EventBus via EventBusBuilder for custom error handling, logging, or strict mode ## Key Features - Thread delivery modes (MAIN, MAIN_ORDERED, BACKGROUND, ASYNC, POSTING) for flexible threading - Sticky events for delivering the last event to newly registered subscribers - Compile-time subscriber indexing to eliminate reflection and improve startup performance - Event inheritance support for dispatching to subscribers of parent event classes - Small library size with no transitive dependencies ## Comparison with Similar Tools - **LiveData** — Jetpack lifecycle-aware observable, scoped to ViewModel; EventBus is broader for cross-component communication - **RxJava/RxAndroid** — reactive streams with operators; EventBus is simpler when you only need pub-sub without stream transformation - **Kotlin Flow** — coroutine-based reactive streams; EventBus is Java-friendly and works without coroutine infrastructure - **Otto** — Square's event bus, now deprecated; EventBus remains actively maintained with more features - **LocalBroadcastManager** — Android framework component, now deprecated; EventBus is the recommended lightweight replacement ## FAQ **Q: Should I use EventBus with modern Android architecture?** A: EventBus remains useful for cross-cutting concerns like logout events or connectivity changes. For ViewModel-to-UI communication, LiveData or StateFlow is the standard approach. **Q: How do I avoid memory leaks?** A: Always unregister in the corresponding lifecycle callback (e.g., unregister in onStop if registered in onStart). **Q: Can I use EventBus in pure Java projects?** A: Yes. The core library has no Android dependency and works in any Java application. **Q: Does sticky event delivery guarantee ordering?** A: Sticky events deliver the most recent event of each type. For ordered delivery, use subscriber priority with regular events. ## Sources - https://github.com/greenrobot/EventBus - https://greenrobot.org/eventbus/ --- Source: https://tokrepo.com/en/workflows/asset-8d6f42d6 Author: Script Depot