例如,我需要一个BroadcastReceiver来获取这些事件:
重新启动或关闭
屏幕开启或关闭
电池状态(电压,插入,温度)
按下物理按钮(相机,媒体等)
但是我需要听众来获取这些事件:
传感器事件的EventListener(加速度,磁场,方向,接近度,温度,光照等)
位置事件的LocationListener(网络位置,GPS)
似乎接收者和听众都存在,以便我可以接收事件。除了明显的语义差异外,两者有什么区别?有什么我可以在一个而不是另一个,特别是在屏幕关闭时我可以采取和运行多少CPU的事情?为了接收事件,为什么有两种完全不同的结构?
答案 0 :(得分:32)
这两者之间存在很多差异,他们回应某事是唯一的相似之处。
差异:
BroadcastReceivers接收Intent,而Listener基本上可以做任何事情,因为它没有明确的目的,它只是一个命名约定。例如,在开发网站上搜索"BroadcastReceiver",然后搜索"Listener"
BroadcastReceivers只接收一个非直接的Intent Broadcast,会明确调用Listeners。
BroadcastReceiver是它自己定义的类,因为它有明确的目的(接收Intents)而Listeners可以是任何东西 - 它们通常是interface
并且提供它们以便回调可以从一个班级到另一个班级。
BroadcastReceivers通常用于全局,系统范围的事件,特定事件的监听器(即位置传感器不应该每秒都提供位置更新,除非它有某些东西,例如要发布到的监听器。对比屏幕关闭意图 - 这很重要,它影响一切,所以应该广播给所有感兴趣的接收者)
BroadcastReceiver选择的事件通常是非连续事件(一次性),而听众,根据他们的工作,可以用于常量更新(连续)。
如果在清单中声明了BroadcastReceivers,则可以对它们进行实例化,只能动态制作监听器(通过代码)。
CPU /电源使用取决于两者的实现,特别是因为如上所述,监听器可以任何。
我可以在一个而不是另一个中做些事情,特别是在屏幕关闭时我可以拍摄和运行多少CPU等事情?
BroadcastReceivers只有10 seconds of guaranteed execution time。听众,因为他们没有达到特定目的,所以没有这个限制。
您从BroadcastReceiver无法做到的事情:
特别是,您可能无法显示对话框或绑定到服务 在BroadcastReceiver中。
可能还有更多 - 这就是我想出来的。
答案 1 :(得分:8)
Broad Cast Receiver就像Sigma,事件监听器就像数学中的整合都是总和......
同样,Broad Cast Receiver和Event Listener都用于事件监听.But Cast接收器用于监听非常重要的事件,如BATTERY_CHANGED,BATTERY_LOW,BOOT_COMPLETED,CALL ETC和Event Lister更新事件中的连续变化比如LOCATION CHANGED,FOCUS GAINED ETC。
答案 2 :(得分:6)
侦听器和接收器都充当触发器处理程序,但是,这些触发器的起源和特征将它们分开。
(广播)接收器由Intents触发。这些Intent的来源可能来自您自己的应用程序的上下文之外。因此,它是应用程序实现进程间通信的一种方式。
此外,不需要运行应用程序来接收Intents。当事件被触发时,意图可以充当闹钟以唤醒应用程序。这节省了电池和CPU。
答案 3 :(得分:1)
主要区别在于:
事件Listeneres是更连续的形式,例如与传感器或按钮点击相关的事件更常见。
但接收器具有不连续性,即此处的事件不是连续性的,例如,开机/关机,消息等