Подтвердить что ты не робот

Использует библиотеку событий, такую ​​как Otto или EventBus, рекомендуемый способ обработки отношений между действиями, фрагментами и фоновыми потоками

В большинстве случаев, когда дело касается дела

  • Пользовательский поток (AsyncTask) для выполнения фоновой обработки
  • Вернуть вычисленный результат обратно в Activity или Fragment
  • Повторное создание Activity или Fragment может произойти до того, как пользовательский поток завершит свою фоновую обработку

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

Источники

Время от времени я слышал, что библиотеки шины событий хороши для обработки отношений между операциями, фрагментами и фоновыми потоками. (Пожалуйста, обратитесь к https://github.com/greenrobot/EventBus. В нем говорится, что хорошо работает с действиями, фрагментами и фоновыми потоками)

Я наткнулся на несколько действительно популярных библиотек событийных автобусов

Мне было интересно, когда речь идет об отношениях между действиями, фрагментами и фоновыми потоками, чем подход с использованием шины событий отличается от подхода с сохраненным фрагментом?

Какой способ является рекомендуемым?

4b9b3361

Ответ 1

Шина событий и Otto не являются "рекомендованными путями" в руководстве для разработчиков Android в первую очередь потому, что они являются сторонними библиотеками для упрощения задачи. И я считаю, что Отто довольно новый, поэтому старые гиды, очевидно, не используют его.

Мне лично нравится Отто, это то, что я использую, и у меня до сих пор не было проблем с этим. Но, конечно, это потому, что оно подходит для моих сценариев использования.

У меня есть пример того, как я использовал Отто здесь.

ОБНОВЛЕНИЕ из будущего: если вам нужна шина событий, greenrobot/EventBus лучше, чем Отто. Кроме того, в некоторых случаях LiveData<T> вполне достаточно вместо использования шины событий (которая вместо передачи событий кому-либо только излучает подписчикам).

Ответ 2

Мне было интересно, когда приходит дело с отношениями между Акциями, Фрагменты и фоновые потоки, как подход к шине событий от подхода с сохранением фрагмента?

Какие способы рекомендуются?

Я думаю, вы неправильно поняли два понятия:

1) предотвращение создания задачи снова и снова при повороте устройства

2) отправка сообщений из потока в действие или из службы в фрагмент или...

Когда мы помещаем задачу внутри фрагмента, мы просто не хотим запускать снова, если мы вращаемся. Также мы хотим получить результат от него, например, мы хотим обновить imageView, но если вы передадите imageView в asynctask, а затем вращаете свое устройство, если вы храните imageView в качестве слабой ссылки, тогда ваш imageView равен null после того, как действие уничтожается, и если вы храните его в качестве сильной ссылки, то вы пропустите активность. поэтому лучшая идея заключается в том, чтобы поместить его внутри фрагмента и сохранить представление как слабую ссылку, и если действие onCreate называется обновлением этой ссылки.

EventBus и Otto - очень хорошие библиотеки для отправки сообщений между любыми компонентами или потоками. вы можете использовать эти или собственные решения для Android, такие как создание интерфейса или localBroadcastManager или обработчик.

как подход к шине событий отличается от подхода с сохранением фрагмента?

Я не изучал исходный код этих файлов, но я думаю, что они создали объект очереди singleton и хранят ваши сообщения внутри него и деактивируют его, чтобы передать ваши сообщения своим слушателям.

Ответ 3

Связь между простым Activity и Fragment может быть легко установлена многими способами, но самый элегантный способ - создание и использование простого класса interface. Но для сценария, такого как действие, которое содержит фрагмент, который показывает другие фрагменты, используя viewpager, тогда этот дочерний фрагмент должен сообщаться с родительским действием или фрагментом, это где EventBus может быть использован, потому что не будет никакого способа Вы можете общаться с. EventBus следует использовать только тогда, когда нет другого способа отправить данные в другой класс.