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