2012-03-31 48 views
0

我有一个接收互联网状态变化的广播接收器。android BroadCastReceiver如何发送消息给听众


我希望能够有听众的名单在这个接收器和他们每个人来更新网络的状态...

我的问题,每一次接收器是由被叫系统,它会创建我的类的新实例,并且不能引用我创建的接收者列表。

解决它的最好方法是什么?

+0

像[this](http://stackoverflow.com/a/9443063/802469)可能会有所帮助。 – Jakar 2012-03-31 21:35:17

+0

[android链接列表的监听器]的可能重复(http://stackoverflow.com/questions/9959366/android-linked-list-of-listeners) – CommonsWare 2012-03-31 22:36:17

回答

1

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

+0

我其实已经想过其他的想法..但如何把列表作为静态?它的工作原理,但它是一个很好的解决方案? – 2012-03-31 21:30:12

+0

static可能似乎可以正常工作,但同样,您的整个应用程序可随时从内存中弹出。当发生这种情况时,你又回到原点了。如何或何时抛出取决于具体的设备和用户在做什么。 – 2012-03-31 21:49:41

+0

我想要做的唯一事情就是在我的活动中更改互联网状态。当互联网上它说:“开”和关闭事件相同。我做了和事件实现接口,它应该如何工作.. – 2012-03-31 21:57:12

1

接收器旨在是无状态的。你应该假设在onReceive()返回后接收器对象本身被销毁。为了记忆的目的,android不会让你的应用永远留在内存中。

你试图做的事情是不可能的。你试图在接收者之上实现可观测模式,除了你发现的情况,你不能跟踪接收者调用之间的观察者集合。

很难告诉你如何解决它而不知道你的应用程序的大背景。如果观察者都是无状态对象,则可以将偏好设置为类型的观察者类型,使用工厂根据需要重新实例化它们。例如,在onReceive(),

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

或者你可以使用一个sqlite数据库,无论什么漂浮你的船。

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