android BroadCastReceiver как отправлять сообщения слушателям - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть приемник вещания, который получает изменения состояния интернета.


я хочу иметь возможность иметь список слушателей в этом ресивере и обновлять состояние Интернета в каждом из них ...

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

каков наилучший способ ее решения?

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

получатели предназначены для безгражданства. вы должны предположить, что сам объект-получатель уничтожен после возврата onReceive(). в целях памяти, Android не держит ваше приложение вечно в памяти.

то, что вы пытаетесь сделать, невозможно. Вы пытаетесь реализовать наблюдаемый шаблон поверх приемника, за исключением того, что, как вы узнали, вы не можете отслеживать набор наблюдателей между вызовами приемника.

Трудно сказать вам, как решить эту проблему, не зная общего контекста вашего приложения. если все наблюдатели являются объектами без сохранения состояния, вы можете сохранить набор наблюдателей типов в настройках, используя фабрику для их повторного создания по мере необходимости. например, в onReceive(),

String[] listeners = mPrefs.getString("listeners").split("|");
for (String l : listeners) {
  MyListener listener = ListenerFactory.obtain(l);
  listener.onWhatever(...);
}

или вы можете использовать базу данных sqlite, что угодно, что плавает на вашей лодке.

другая идея состоит в том, чтобы сериализовать ваши слушатели в sqlite db как BLOB по мере их регистрации, десериализовать их в приемнике, выполнить обратный вызов и повторно сериализовать в DB.

1 голос
/ 01 апреля 2012

Попробуйте систему push-уведомлений, и если вы хотите иметь список пользователей, попробуйте также UrbanAirShip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...