android BroadCastReceiver如何向监听器发送消息

时间:2012-03-31 21:25:53

标签: android broadcastreceiver

我有一个接收互联网状态变化的广播接收器。

我希望能够在这个接收器中有一个听众列表并更新每个听众的状态......

我的问题是,每次系统调用接收器时,它都会生成我的类的新实例,并且不能引用我创建的接收器列表。

解决问题的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

尝试推送通知系统,如果您想拥有用户列表,请尝试使用UrbanAirShip。

答案 1 :(得分:1)

接收者意图是无国籍人。你应该假设接收器对象本身在onReceive()返回后被销毁。出于记忆目的,android不会让你的应用程序永远存在于内存中。

你想要做的事是不可能的。你试图在接收器上实现可观察的模式,除非你发现,你不能跟踪接收器调用之间的观察者集。

如果不了解应用程序的更大上下文,很难告诉您如何解决它。如果观察者都是无状态对象,则可以将一组观察者类型存储在首选项中,使用工厂根据需要重新实例化它们。例如,在onReceive()

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

或者你可以使用sqlite数据库,不管你的船是什么。

另一个想法是将侦听器序列化为sqlite数据库,因为它们已注册为BLOB,在接收器中反序列化它们执行回调,并重新序列化到数据库中。