Android
97
Прежде всего нужно создать экземпляр
BroadcastReceiver
и переопределить
метод
onReceive
, добавив в него обработку сообщений:
Java
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyApp", "We received a broadcast for " + intent.getAction());
}
}
Kotlin
var receiver:BroadcastReceiver = object:BroadcastReceiver() {
override fun onReceive(context:Context, intent:Intent) {
Log.d("MyApp", "We received a broadcast for " + intent.getAction())
}
}
Затем следует создать экземпляр
IntentFilter
, который в действительности
просто хранит список
строк с названиями действий, нас интересующих:
Java
IntentFilter intentFilter = new IntentFilter("data-received");
Kotlin
val intentFilter = IntentFilter("datareceived")
IntentFilter
обладает более широкими возможностями, чем показано здесь, но
чаще всего он используется как простой фильтр строк с названиями действий.
Созданный экземпляр
intentFilter
нужно передать в вызов метода
register
Receiver
, после чего
BroadcastReceiver
начнет получать рассылаемые
сообщения
с действием
"datareceived"
:
Java
LocalBroadcastManager.getInstance(context).registerReceiver(receiver,
intentFilter);
Kotlin
LocalBroadcastManager.getInstance(context).registerReceiver(receiver,
intentFilter)
Обратите внимание, что
LocalBroadcastReceiver
является потокобезопасным,
поэтому посылать сообщения с его помощью можно даже из фонового потока
и безопасно их получать в потоке пользовательского интерфейса. Однако сама
рассылка производится асинхронно, то есть операторы, следующие за вызо
-
вом
sendBroadcast
, не обязательно будут выполнены после доставки сообщения
получателям. Однако есть метод
broadcastSync
, который гарантирует немедлен
-
ную доставку сообщений в синхронном стиле.
Также очень важно не забывать отменять регистрацию получателей
Broad
castReceiver
, например перед их удалением в методе
finished
экземпляра
Ac ti
vi ty
. В противном случае возможны утечки памяти.
98
Передача
сообщений
Существует также ряд сторонних систем обмена сообщениями, доступных
в Java и Android, включая Otto от Square и EventBus от GreenRobot. Имеется так
-
же класс
Observable
, используемый в очень популярной библиотеке RxJava для
Android, но, как нам кажется, шаблон проектирования Наблюдатель довольно
сильно отличается от традиционного шаблона Издатель/подписчик и поэтому
заслуживает отдельного рассмотрения.
Наконец, без труда можно написать свою шину сообщений (систему отправ
-
ки и приема событий) на Java; например, мы реализовали такую шину, написав
всего 40 строк кода.
iOS
Рассылать сообщения в iOS можно несколькими способами. Так же как в An
-
droid, самые распространенные из них – обратные вызовы и рассылка уведом
-
лений. Давайте рассмотрим их различия и определим, когда лучше использо
-
вать каждый из этих проверенных шаблонов.
Do'stlaringiz bilan baham: