2017-01-19 6 views
0

Am создание музыкального плеера. Есть услуга для потоковой передачи музыки в фоновом режиме Для того, что бы вы могли обслуживать и от службы к активности, какой механизм, я должен использовать? Теперь я использую зеленый робот EventBus и AIDL. В EventBus, какой из них лучше? Мое приложение работает нормально, но проблема в том, что одновременный множественный щелчок вызывает ANR в приложении.AIDL, обратный вызов интерфейса, EventBus, широковещательный приемник?

recyclerViewAdapterTwo = new RecyclerViewAdapterTwo(ActivityTwo.this, trackList, categoriesList, new MusicTracksRecyclerViewAdapterTwo.ViewHolderOnClickHandler() { 
     @Override 
     public void onClick(int id, MusicTracksRecyclerViewAdapterTwo.VHItem vh) { 
      EventBus.getDefault().post(new PostSongListChangeToService(songDataList, position)); 
     } 
    }); 
+0

«связанный сервис» шаблон (или как AIDL или «локальная оценка услуг») – pskink

+0

Мое приложение работает нормально, но проблема в том, что одновременное множественный щелчок вызывает ANR в приложении. –

+0

без кода, я понятия не имею, что «одновременный множественный щелчок» вы имеете в виду – pskink

ответ

1

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

Теперь для ANR, не могли бы вы поделиться каким-то кодом, где/как вы обрабатываете события. Другие, которые затем пытаются обработать большую часть данных в фоновом потоке, а затем перейти к главной теме только для фактического воспроизведения/паузы/пропустить и т. Д.

PS: Если вы используете Handler для собственно преформы вещей на MainThread, постарайтесь не публиковать все за один раз, дайте вашей очереди некоторое время между msg/runnables для запуска. Это может привести к небольшой задержке при нажатии кнопки, но не заблокирует вашу активность/услугу.

вы можете обратиться к Отто здесь: http://square.github.io/otto/

+0

Какая версия eventbus лучше? –

+0

Любой автобус событий будет вести себя аналогичным образом для вас. У меня был прошлый опыт общения с отто. –

0

Если служба и активность находится в том же процессе, вы не должны использовать AIDL, также радиовещательный приемник не имеет никакого смысла для этого purpose.You можно использовать IntentService для достижения этой функциональности.

+0

* Вы можете использовать IntentService для достижения этой функциональности. * Для чего именно? –

+0

также, почему не следует использовать AIDL в этом случае? – pskink

+0

By * process * вы имеете в виду * Linux-процесс *? Что-то не так, пожалуйста, уточните больше и добавьте цитату. – Enzokie

0

Добавление другой возможности, так как в течение некоторого времени Отто автобус события теперь осуждается в пользу RxJava. Я предлагаю попробовать RxJava, поскольку он обеспечивает большую гибкость и прозрачность в обмене нитями, а также обеспечивает огромные функциональные операции, которые делают код красивым, таким образом, поддерживаемым :)

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

Для этого вы можете попробовать RHub, который позволяет использовать эту функцию «Автобус».

Вы можете проверить использование example app

Смежные вопросы