HermesEventBus — это библиотека для использования EventBus между процессами, полезная в IPC или разработке плагинов. Она предоставляет те же API, что и EventBus, и легко используется.
EventBus — одна из самых широко используемых библиотек, упрощающая коммуникацию между различными компонентами в Android. Однако она не поддерживает отправку событий между процессами.
Поэтому HermesEventBus создан для поддержки отправки событий между процессами.
Обратите внимание, что HermesEventBus основан на EventBus 3.0.0, и если вы используете более раннюю версию, вам следует изменить ваш код. В противном случае вы не будете получать никаких событий!!!
Нет смысла называть метод, принимающий события, "onEventXXX". Вместо этого вы должны добавить аннотацию @Subscribe к методу:
@Subscribe(threadMode = ThreadMode.MAIN)
public void showText(String text) {
textView.setText(text);
}
Эта библиотека основана на двух библиотеках: Hermes и EventBus.
Отправка событий основана на EventBus, а IPC — на Hermes, умной, новаторской и удобной для Android Inter-Process Communication (IPC) библиотеке.
Эта библиотека выбирает один процесс в качестве основного процесса и рассматривает остальные процессы как подпроцессы.
Каждый раз, когда событие отправляется, библиотека выполняет следующие действия:1. Использует библиотеку Hermes для отправки события в основной процесс.
Основной процесс использует EventBus для отправки события внутри основного процесса.
Основной процесс использует библиотеку Hermes для отправки события во все подпроцессы.
Каждый подпроцесс использует EventBus для отправки события внутри себя.
Кроме того, HermesEventBus использует библиотеку Concurrent-Utils для решения тонких проблем, связанных с конкурентностью, вызванных мертвым замком и условиями гонки.
Эта библиотека может использоваться для отправки событий не только внутри одного приложения, имеющего более одного процесса, но и между различными приложениями.
Если вам нужно отправлять и получать события только внутри одного приложения, имеющего более одного процесса, выполните следующие три шага:
Добавьте следующее в ваш файл gradle:
dependencies {
compile 'xiaofei.library:hermes-eventbus:0.3.0'
}
Для Maven используйте следующее:
<dependency>
<groupId>xiaofei.library</groupId>
<artifactId>hermes-eventbus</artifactId>
<version>0.3.0</version>
<type>pom</type>
</dependency>
В методе Application.onCreate()
вашего класса приложения добавьте следующее выражение:
HermesEventBus.getDefault().init(this);
Каждый раз, когда вы используете EventBus, замените "EventBus" на "HermesEventBus", как показано ниже:``` HermesEventBus.getDefault().register(this);
HermesEventBus.getDefault().post(new Event());
HermesEventBus также может отправлять и получать события внутри одного процесса, поэтому если вы уже используете HermesEventBus, больше не используйте EventBus.
### Шаг 4
Если процесс больше не нуждается в отправке и получении событий, он должен вызвать следующее:
HermesEventBus.getDefault().destroy();
В противном случае вы получите исключение `android.os.DeadObjectException` или другие исключения. Однако эти исключения будут выводить сообщения об исключениях, но не приведут к аварийному завершению приложения.
## Между приложениями
Если вы хотите отправлять и получать события между приложениями, выполните следующие шаги:
### Шаг 1
Добавьте следующее в файл gradle каждого приложения:
dependencies { compile 'xiaofei.library:hermes-eventbus:0.3.0' }
Для Maven используйте следующее:
Выберите одно приложение в качестве основного. Вы можете выбрать любое приложение в качестве основного, но предпочтительно выбрать долгоживущее.
В файле AndroidManifest.xml
основного приложения добавьте следующий сервис:
<service android:name="xiaofei.library.hermes.HermesService$HermesService0"/>
Вы можете также добавить некоторые атрибуты к сервису, если это необходимо.
События, отправляемые между приложениями, должны иметь одинаковое имя пакета, одинаковое имя класса и одинаковые методы.И не забудьте сохранить все классы событий и методы внутри этих классов в файлах proguard-rules.
В методе Application.onCreate()
класса приложения основного приложения добавьте следующее выражение:
HermesEventBus.getDefault().init(this);
В методе Application.onCreate()
класса приложения других приложений добавьте следующее выражение:
HermesEventBus.getDefault().connectApp(this, packageName);
packageName
— это имя пакета основного приложения.
Каждый раз, когда вы используете EventBus, замените "EventBus" на "HermesEventBus", как показано ниже:
HermesEventBus.getDefault().register(this);
HermesEventBus.getDefault().post(new Event());
HermesEventBus также может отправлять и получать события внутри одного процесса, поэтому если вы уже используете HermesEventBus, больше не используйте EventBus.
Если процесс больше не нуждается в отправке и получении событий, он должен вызвать следующее:
HermesEventBus.getDefault().destroy();
В противном случае вы получите исключение android.os.DeadObjectException
или другие исключения. Однако эти исключения будут выводить сообщения об исключениях, но не приведут к аварийному завершению приложения.
GitHub Xiaofei: https://github.com/Xiaofei-it
Hermes — это умная, новая и удобная для использования архитектура для Android Inter-Process Communication (IPC).Shelly — это библиотека для бизнес-ориентированного программирования, предоставляющая новую модель, которая использует цепочку методов для иллюстрации того, как каждый компонент изменяется в зависимости от бизнес-объекта.AndroidDataStorage — это удобная и высокопроизводительная библиотека для хранения данных в системе Android.
ComparatorGenerator — это удобная вспомогательная библиотека для генерации компаратора для определенного класса, полезная при сортировке экземпляров данного класса.
Copyright (C) 2016 Xiaofei, ele.me
Бинарные файлы и исходный код AndroidDataStorage могут быть использованы в соответствии с Apache License, Version 2.0.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )