我有一个接收互联网状态变化的广播接收器。
我希望能够在这个接收器中有一个听众列表并更新每个听众的状态......
我的问题是,每次系统调用接收器时,它都会生成我的类的新实例,并且不能引用我创建的接收器列表。
解决问题的最佳方式是什么?
答案 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,在接收器中反序列化它们执行回调,并重新序列化到数据库中。