greenrobot/EventBus

Additional

Language
Java
Version
V3.1.1 (Aug 27, 2018)
Created
Jul 16, 2012
Updated
Jan 21, 2020
Owner
Markus Junginger (greenrobot)
Contributors
Prateek Srivastava (f2prateek)
william-ferguson-au
Joan Zapata (JoanZapata)
PerfectCarl
jnagels
Markus Junginger (greenrobot)
talklittle
Frieder Bluemle (friederbluemle)
Leandros
Jan Heinrich Reimer (heinrichreimer)
stefanhoth
nbeloglazov
mikosik
zsoltvilagos
Chau Thai (chthai64)
mormih
rjbrock
greenrobot-team
Show all (19)19
Activity
Badge
Generate
Download
Source code
APK file

Promotion

Hey, do have a minute for a quick survey on how we are doing with EventBus?

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 (~50k jar)
  • is proven in practice by apps with 100,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.

Add EventBus to your project

Available on Maven Central.

Via Gradle:

implementation 'org.greenrobot:eventbus:3.1.1'

Via Maven:

<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus</artifactId>
    <version>3.1.1</version>
</dependency>

R8, ProGuard

If your project uses R8 or ProGuard add the following rules:

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
 
# And if you use AsyncExecutor:
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

Homepage, Documentation, Links

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

Features

Documentation

Changelog

FAQ

How does EventBus compare to other solutions, like Otto from Square? Check this comparison.

License

Copyright (C) 2012-2017 Markus Junginger, greenrobot (http://greenrobot.org)

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

More Open Source by greenrobot

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

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

greenDAO is an ORM optimized for Android: it maps database tables to Java objects and uses code generation for optimal speed.