2016-11-07 102 views
1

我想注册一个扩展BroadcastReceiver作为Android清单中的接收器的类。我没有麻烦注册它们,但由于该类没有空的构造函数而出现问题。BroadcastReceiver在Android清单中没有默认的构造函数

  1. 我不明白为什么BroadcastReceiver需要一个空的构造函数,有没有办法解决这个问题?
  2. 我可以在我的类中创建一个公共的空构造函数,但问题是,这个类也是一个单例类。这意味着我不希望这个类使用空构造函数!这里有一个明显的冲突,我可以写一个空的构造函数,并且信任用户永远不会通过编写文档来使用它,但必须有一个更简单的方法吗?

TLDR;如何实现一个广播接收器的类(需要在android清单中注册它的空构造函数),但同时也是一个单例类或拒绝用户访问默认构造函数的类。 (我试过让默认的构造函数受到保护,但这并不能解决问题,因为清单无法注册接收器)

回答

3

有没有办法解决这个问题?

编号Android不知道如何调用任何其他构造函数或传递给该构造函数的值。

这个类也是一个单例类

那是不可能的。 Android会为其接收到的每个广播创建一个新的清单登记实例BroadcastReceiver

but there has to be a simpler method right? 

是:不要让BroadcastReceiver单身。使其他一些类别成为单身人士,即BroadcastReceiver使用。

+0

我不知道android每次都会创建一个broadcastreceiver的新实例!谢谢你的洞察!幸运的是我可以改变我的设计,并从广播接收器中分离出单身。 –

0

BroadcastReceiver是一个抽象类,它必须扩展才能在Manifest上注册为receiver。扩展方法后,您无法更改其方法的范围,并且无法对其执行Singleton模式。如果您试图将Singleton设置为BroadcastReceiver,那么设计可能存在问题。

相关问题