Git Product home page Git Product logo

hermeseventbus's Introduction

HermesEventBus

HermesEventBus is a library for using EventBus between processes, useful in IPC or plugin-in development. It has the same APIs as EventBus and easy to use.

Chinese Readme 中文文档

EventBus is one of the most widely-used libraries which simplifies communication between different components in Android.

Note that this library is based on EventBus 3.0.0 and if you are using the lower version, you should modify your code. Otherwise you will not receive any event!!!

It is useless to name the method receiving events "onEventXXX". Instead, you should add @Subscribe annotation on the method, as the following does:

@Subscribe(threadMode = ThreadMode.MAIN)
public void showText(String text) {
    textView.setText(text);
}

#Principle

The library is based on two libraries: Hermes and EventBus.

The event post is based on EventBus and the IPC is based on Hermes, a smart, novel and easy-to-use framework for Android Inter-Process Communication (IPC).

This library will choose a process as the main process, and regard the other processes as the sub-processes.

Each time an event is posted, the library does the following:

  1. Use the Hermes library to send the event to the main process.

  2. The main process uses EventBus to post the event within the main process.

  3. The main process uses the Hermes library to send the event to all of the sub-processes.

  4. Each sub-process uses EventBus to post the event within itself.

Moreover, import the Concurrent-Utils library to solve the subtle problems with respect to concurrency, which are caused by dead locks and race conditions.

#Usage

This library can post events not only within a single app which has more than one process, but also between distinct apps.

##Within a single app

If you only want to post and receive events within a single app which has more than one process, then do the following three steps:

###Step 1

Add the following into your gradle file:

dependencies {
    compile 'xiaofei.library:hermes-eventbus:0.1.1'
}

For maven, please use the following:

<dependency>
  <groupId>xiaofei.library</groupId>
  <artifactId>hermes-eventbus</artifactId>
  <version>0.1.1</version>
  <type>pom</type>
</dependency>

###Step 2

In the onCreate method of your application class, add the following:

HermesEventBus.getDefault().init(this);

###Step 3

Each time you use EventBus, replace "EventBus" with "HermesEventBus", as the following does:

HermesEventBus.getDefault().register(this);

HermesEventBus.getDefault().post(new Event());

HermesEventBus can also post and receive event within a process, so do not use EventBus any more if you have already being using HermesEventBus.

##Between apps

If you want to post and receive events between apps, then do the following:

###Step 1

Add the following into the gradle file of each app:

dependencies {
    compile 'xiaofei.library:hermes-eventbus:0.1.1'
}

For maven, please use the following:

<dependency>
  <groupId>xiaofei.library</groupId>
  <artifactId>hermes-eventbus</artifactId>
  <version>0.1.1</version>
  <type>pom</type>
</dependency>

###Step 2

Choose an app as a main app. You can choose an arbitrary app as the main app, but a long-lived app is preferred.

In the AndroidManifest.xml of the main app, add the service below:

<service android:name="xiaofei.library.hermes.HermesService$HermesService0"/>

You can add some attributes to the service, if necessary.

###Step 3

The event posted between apps should have the same package name, the same class name and the same methods.

And remember to keep all of your event classes and the methods within the classes in the proguard-rule files.

###Step 4

In the onCreate method of the application class of the main app, add the following:

HermesEventBus.getDefault().init(this);

In the onCreate method of the application class of other apps, add the following:

HermesEventBus.getDefault().connectApp(this, packageName);

The "packageName" is the package name of the main app.

###Step 5

Each time you use EventBus, replace "EventBus" with "HermesEventBus", as the following does:

HermesEventBus.getDefault().register(this);

HermesEventBus.getDefault().post(new Event());

HermesEventBus can also post and receive event within a process, so do not use EventBus any more if you have already being using HermesEventBus.

#License

Copyright (C) 2016 Xiaofei, ele.me

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

hermeseventbus's People

Contributors

xiaofei-it avatar xujinyang avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.