В моих проектах я использую BroadcastReceiver
s как обратный вызов из длинного потока (например, уведомляет о завершении загрузки и отправки некоторых данных ответа от Рабочего Thread
, чтобы активность могла отображать соответствующее сообщение пользователю ..). Чтобы использовать BroadcastReceiver
s, я должен быть осторожным, чтобы регистрировать и отменить регистрацию широковещательного приемника каждый раз, когда я его использую, а также заботиться о том, какие сообщения отправлять esspecialy, когда я использую этот метод для более разных действий (например, загрузка, создание WebService звонки и т. д.). А также для отправки пользовательских объектов через намерение Broadcast мне также нужно сделать объекты Parcelable
.Android BroadcastReceiver или простой метод обратного вызова?
В отличие от этого подхода, я также видел подход методов обратного вызова, который кажется более простым, чем метод, который я использую. Способы обратного вызова - это простая реализация интерфейсных методов, которые могут использоваться для достижения такого же эффекта, как передача BroadcastRecaiver в приложении. Этот подход не требует реализации Parcelable для возврата сложных объектов, и он не использует такие ключи, как BroadcastReceiver
.. Я думаю, что плохая часть заключается в том, что мне нужно проверить объект обратного вызова для нулевого значения, прежде чем я хочу вызвать метод обратного вызова. а также убедиться, что я запускаю код из реализации в потоке пользовательского интерфейса, поэтому я могу обновлять интерфейс без ошибок.
Хорошо, я надеюсь, вы поняли, что я хотел сказать :).
Теперь вопрос в том, как вы думаете, что метод обратного вызова лучше (легче, чище, быстрее ..), чем подход BroadcastReceiver
, когда они используются только внутри одного приложения? (Обратите внимание, что я не использую Android Service
для фоновых работ .. только AsyncTask
и Thread
s)
Спасибо!
Я наградил это как ответ и дал ему щедрость, потому что это самый полный ответ. Спасибо всем за ваши мысли! – Cata
Отличный ответ. Я поклонник шаблона обратного вызова/интерфейса, но я часто наследую проекты с широким использованием шаблона намерений Broadcast, и я часто задаюсь вопросом, не ошибаюсь ли я в этом. Приятно слышать, что на самом деле это вопрос предпочтений дизайна, а не лучшей практики. Мне нравится тип безопасности и четкость кода, предлагаемые интерфейсами, и я, вероятно, буду придерживаться их на данный момент –
Очень интересное и подробное мнение +1 – Jorgesys