我正在写一个简单的广播接收器。我已经在清单和代码中注册了接收器。就我的目的而言,这是一个简单的接收器,不需要做任何花哨的事情。
在这种情况下,是否有理由选择一种方法而不是另一种方法?在清单中注册接收者是否更有效率(执行速度更快)?或者它们基本上都是一样的?
我之所以问这个问题,是因为我正在编写的应用程序需要非常高效,而我还没有找到关于这两种方法之间实际差异的好信息。我正在尝试遵循最好的编码实践。
干杯
发布于 2011-10-25 03:25:58
嗯,它们实际上是不同的。你似乎认为这几乎是一样的。在代码中注册接收器时,必须在应用程序被销毁时注销它(实际上,当注册它的Activity或Service被销毁时)。另一方面,当您在清单中声明它时,即使您的应用程序没有运行,也可以使其可用。
问问你自己:这两种方法中哪一种最适合你的需求?
发布于 2011-10-25 03:34:23
我不能说一个比另一个的实现效率高(我的直觉告诉我,它太接近了,不太重要),但出于Cristian的回答中暗示的原因,以编程方式注册和注销可能会使您的应用程序更有效率。
如果您在清单中注册,则任何与您的筛选器匹配的意图都会唤醒您的广播接收器。如果您以编程方式注册,则只能允许在特定时间唤醒接收器,并且您可以控制哪些意图将唤醒接收器以及在哪些时间唤醒接收器。
如果你真的担心在不需要的时候唤醒接收器,那么在代码中以编程的方式来做。您需要更加小心地始终取消注册,并确保您的接收器始终按照您期望的那样注册,但如果您正确地这样做,您可以避免不必要地唤醒您的接收器,从而节省一些效率。
发布于 2013-12-12 13:26:09
这取决于场景。
何时使用哪种方法注册
使用哪种方法注册您的BroadcastReceiver取决于您的应用程序对系统事件做了什么。我认为你的应用程序想要了解系统范围内的事件主要有两个原因:
第一类的例子是需要在设备启动时立即工作的应用程序,或者在安装应用程序时必须启动某种工作的应用程序。Battery Pro或App2SD就是这类应用的很好的例子。对于此类型,必须在清单文件中注册BroadcastReceiver。
第二类的例子是发出信号改变你的应用程序可能依赖的环境的事件。假设您的应用程序依赖于已建立的蓝牙连接。你必须对状态变化做出反应--但只有当你的应用程序处于活动状态时才能做出反应。在这种情况下,不需要静态注册的广播接收机。动态注册会更合理。
还有一些事件,您甚至不允许静态注册。这方面的一个例子是每分钟广播一次的Intent.ACTION_TIME_TICK事件。这是一个明智的决定,因为静态接收器将不必要地耗尽电池。
https://stackoverflow.com/questions/7880741
复制相似问题