Android中的 BroadcastReceiver 和 ResultReceiver 有什么区别?
答案 0 :(得分:35)
结果接收者:
Generic interface for receiving a callback result from someone.
广播接收器:
Base class for code that will receive intents sent by sendBroadcast().
修改强>
背景:所有网络操作/长时间运行操作都应该远离主线程。有两种方法可以做到这一点:
如果您需要在主线程之外执行工作,但只有在用户与您的应用程序交互时,您应该创建一个新线程而不是服务。例如,如果要播放某些音乐,但仅在活动运行时,可以创建异步线程。但是,如果您希望即使在用户退出应用程序(例如下载)之后该流程仍会继续,那么请使用服务
让我们说你选择2.现在
它会将数据发回您的活动。
此处接收数据的第三步可以通过两种方式完成
1。)广播接收器:多个接收器可以接收您的数据。如果您想在应用程序之间发送数据/通知(例如,您还要与fb和twitter交互,您的网络广播使用多个接收器),则使用此选项, 无论何时你发送广播它的系统广播。
2。)结果接收者:您的应用程序是数据的唯一接收者。它是您实现的接口,并通过putExtra将其传递给intentService。然后,IntentService将获取此对象 并调用其receiver.send函数发送任何内容(在bundle中) 呼叫活动。结果接收器有 如果你的所有通信都是广播接收者的偏好 在您的应用程序内部
编辑:我还应该提一下这个警告
警告:服务在其托管进程的主线程中运行 - service不会创建自己的线程,也不会单独运行 过程(除非您另行指定)。这意味着,如果你的 服务将进行任何CPU密集型工作或阻塞操作 (如MP3播放或网络),你应该创建一个新的线程 在服务范围内做这项工作。通过使用单独的线程,你 将降低应用程序无响应(ANR)错误的风险 应用程序的主线程可以保持专用于用户交互 与您的活动。
答案 1 :(得分:10)
BroadcastReceiver是接收广播的接收器。这些是由某人发送的,意图是可能有许多接收者接收它们(如无线电广播)。
另一方面,ResultReceiver旨在接收某人的回调结果。因此,这可以与对讲机进行比较,在那里你打电话给某人然后将从你所呼叫的那个人那里得到答案(结果)。
答案 2 :(得分:3)
这两个类完全不同。它实际上与广播和结果之间存在完全相同的差异。
从逻辑的角度来看,这是解释。从代码的角度来看,如果您要比较BroadcastReceiver和ResultReceiver,您可能会发现巨大的差异。基本上这两个类都是建立在IPC之上的,但是BroadcastReceiver要复杂得多,因为它的性质不同(我在第一部分试图解释)。
答案 3 :(得分:0)
广播接收器
广播接收器是响应系统范围广播公告的组件。例如,广播宣布屏幕已关闭,电池电量低或拍摄照片。应用程序还可以启动广播 - 例如,让其他应用程序知道某些数据已下载到设备并可供他们使用。虽然广播接收器不显示用户界面,但是它们可以创建状态栏通知以在广播事件发生时警告用户。但更多的是,广播接收器只是其他组件的“网关”,旨在完成非常少量的工作。例如,它可能会启动服务以根据事件执行某些工作。
结果接收器
如果您的服务将成为您应用程序的一部分,那么您将使它变得比它需要的更复杂。由于您有一个从Restful Web Service获取某些数据的简单用例,因此您应该查看ResultReceiver和IntentService。
当您要执行某些操作时,此Service + ResultReceiver模式通过使用startService()启动或绑定到服务来工作。您可以指定要执行的操作,并通过Intent中的extras传递ResultReceiver(活动)。