greenrobot/EventBus

General

Category
Free
Tag
Event Buses
License
Apache License, Version 2.0
Min SDK
4 (Android 1.6 Donut)
Registered
Jul 5, 2014
Favorites
30
Link
https://github.com/greenrobot/EventBus
See also
TinyBus
Lazybones
RxBus
RxBus
Otto

Additional

Language
Java
Version
V3.3.1 (Dec 8, 2021)
Created
Jul 16, 2012
Updated
Sep 13, 2023
Owner
Markus Junginger (greenrobot)
Contributors
Prateek Srivastava (f2prateek)
William Ferguson (william-ferguson-au)
Joan Zapata (JoanZapata)
PerfectCarl
Jelle Nagels (jnagels)
Markus Junginger (greenrobot)
Andrew Shu (talklittle)
Frieder Bluemle (friederbluemle)
Arvid Gerstmann (Leandros)
Jan Heinrich Reimer (heinrichreimer)
Stefan Hoth (stefanhoth)
Mikita Belahlazau (nbeloglazov)
Marcin Mikosik (mikosik)
Zsolt Világos (zsoltvilagos)
Chau Thai (chthai64)
Michael Morozov (mormih)
Uwe - ObjectBox (greenrobot-team)
Andrei Dobrescu (andob)
Show all (20)20
Activity
Badge
Generate
Download
Source code

EventBus

EventBus is a publish/subscribe event bus for Android and Java.

EventBus...

  • simplifies the communication between components
    • decouples event senders and receivers
    • performs well with Activities, Fragments, and background threads
    • avoids complex and error-prone dependencies and life cycle issues
  • makes your code simpler
  • is fast
  • is tiny (~60k jar)
  • is proven in practice by apps with 1,000,000,000+ installs
  • has advanced features like delivery threads, subscriber priorities, etc.

EventBus in 3 steps

  1. Define events:

    public static class MessageEvent { /* Additional fields if needed */ }
  2. Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode:

    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent(MessageEvent event) {
        // Do something
    }

    Register and unregister your subscriber. For example on Android, activities and fragments should usually register according to their life cycle:

     @Override
     public void onStart() {
         super.onStart();
         EventBus.getDefault().register(this);
     }
    
     @Override
     public void onStop() {
         super.onStop();
         EventBus.getDefault().unregister(this);
     }
  3. Post events:

     EventBus.getDefault().post(new MessageEvent());

Read the full getting started guide.

There are also some examples.

Note: we highly recommend the EventBus annotation processor with its subscriber index. This will avoid some reflection related problems seen in the wild.

Add EventBus to your project

Available on Maven Central.

Android projects:

implementation("org.greenrobot:eventbus:3.3.1")

Java projects:

implementation("org.greenrobot:eventbus-java:3.3.1")
<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus-java</artifactId>
    <version>3.3.1</version>
</dependency>

R8, ProGuard

If your project uses R8 or ProGuard this library ships with embedded rules.

Homepage, Documentation, Links

For more details please check the EventBus website. Here are some direct links you may find useful:

Features

Documentation

Changelog

FAQ

License

Copyright (C) 2012-2021 Markus Junginger, greenrobot (https://greenrobot.org)

EventBus binaries and source code can be used according to the Apache License, Version 2.0.

Other projects by greenrobot

ObjectBox (GitHub) is a new superfast object-oriented database.

Essentials is a set of utility classes and hash functions for Android & Java projects.