96
Передача
сообщений
знающими друг о друге. Например, с его помощью можно рассылать сообще
-
ния из класса
Adapter
, управляющего несколькими разными
RecyclerView
, не за
-
ботясь о том, что произойдет при получении этих сообщений. Одно представ
-
ление списка может обновить свой список в ответ на сообщение конкретного
типа; другое – отреагировать как-то иначе, может быть, даже вызвать
finish
своего
Ac ti vi ty
. Экземпляру
Adapter
не нужно знать о существовании экземпля
-
ров
RecyclerView
или
Ac ti vi ty
, в которых они размещены, и наоборот –
Local
BroadcastManager
посылает сигнал, а любая заинтересованная
сторона сможет
отреагировать на него по вашему выбору.
Экземпляр
LocalBroadcastManager
имеет два метода, используемых особенно
часто:
sendBroadcast
и
registerReceiver
. Как вы уже наверняка догадались,
send
Broadcast
посылает сообщение и уведомляет любые другие классы, зарегистри
-
ровавшиеся как получатели сообщений этого типа. Также важную роль играет
метод
unregisterReceiver
, позволяющий прекратить прием сообщений, если по
-
лучатель был удален из приложения (и тем самым предотвратить утечки па
-
мяти!).
Сообщениями в данном случае являются экземпляры класса
Intent
, того же
класса, который используется для запуска новых экземпляров
Ac ti vi ty
и опи
-
сания общесистемных сообщений. Экземпляр
Intent
имеет свойство, описы
-
вающее «действие», которое можно инициализировать строкой.
Также есть
возможность добавить дополнительные действия позже с помощью метода
addAction
.
Синглтон
LocalBroadastManager
позволяет послать сообщение
Intent
, предла
-
гая для
этого метод
sendBroadcast
:
Java
Intent intent = new Intent("data-received");
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
Kotlin
val intent = Intent("datareceived")
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
После вызова этого метода для всех экземпляров
BroadcastReceiver
, зарегист-
рировавшихся в том же глобальном экземпляре
LocalBroadcastManager
в качестве
получателей этого действия, будет вызван метод
onReceive
с соответствующим
экземпляром
Intent
во втором аргументе. Обратите внимание,
что уведом
-
ляться будут только экземпляры
BroadcastReceiver
, зарегистрировавшиеся с по
-
мощью
IntentFilter
, включающего действие, соответствующее действию в эк
-
земпляре
Intent
. То есть если в предыдущем примере послать
Intent
с другим
действием, например
Intent
intent
=
new
Intent("userlogin")
,
BroadcastReceiver
не получит сообщения, потому что действия в его фильтре
IntentFilter
и в со
-
общении
intent
не совпадают.
Do'stlaringiz bilan baham: