Android EventBus — последовательность получения сообщения

Я использую EventBus в своем приложении, и у меня есть один вопрос, как это будет выполняться?

Я зарегистрировал приемник в приложении, активности и фрагменте

Что я хочу в приложении:

Получите сообщение в классе приложения и внесите некоторые изменения, а затем отправьте его во фрагмент или действие.

Теперь мой вопрос:

  1. Имеет ли шина событий определенную последовательность для получения сообщения? например: фрагмент -> активность -> приложение
  2. Если да, то в какой последовательности он будет выполняться? a : фрагмент -> активность -> приложение b : приложение -> фрагмент -> активность c : случайным образом
  3. И, наконец, как я могу получить сообщение в приложении, а затем отправить фрагмент или действие, используя тот же класс модели messageEvent

person Lalit Jadav    schedule 15.02.2021    source источник


Ответы (1)


EventBus имеет последовательность доставки, но не по умолчанию, при подписке на EventBus вы можете установить priority с помощью @Subscribe(priority = 0), подписчики с более высоким приоритетом получат сообщение первыми, которые находятся в той же политике потока. Но подписчики являются конечной точкой любой передачи, что означает, что изменения, внесенные в данные одного подписчика, не будут автоматически отправлены другому подписчику. Чтобы достичь того, что вам нужно, вы можете зарегистрировать основного подписчика только как Application, затем преобразовать данные и снова передать их с другими аргументами, на которые подпишется фрагмент/активность.

class App: Application(){

    @Subscribe(threadMode = ThreadMode.MAIN)
    void onOriginalData(OriginalData data){
        //do transformations on data and send transformedData to Activity/Fragment
    }
}

class Activity: AppCompatActivity {
    
    @Subscribe(threadMode = ThreadMode.MAIN)
    void onTransformedData (TransformedData data){

    }
}
person Rajan Kali    schedule 15.02.2021
comment
Это способ - person apxcode; 15.02.2021