android中的Broadcast Receiver和ResultReceiver

use*_*564 27 android

android中的BroadcastReceiverResultReceiver有什么区别?

Sla*_*ast 37

结果接收者:

Generic interface for receiving a callback result from someone.
Run Code Online (Sandbox Code Playgroud)

广播接收器:

Base class for code that will receive intents sent by sendBroadcast().
Run Code Online (Sandbox Code Playgroud)

编辑:

背景:所有网络操作/长时间运行操作都应该远离主线程.两种方法:

  1. 异步任务 - 对于简单网络,比如说retreive一个图像/做数据库处理
  2. 服务 - 用于复杂的长时间运行后台进程

如果您需要在主线程之外执行工作,但只有在用户与您的应用程序交互时,您应该创建一个新线程而不是服务.例如,如果要播放某些音乐,但仅在活动运行时,可以创建异步线程.但是,如果您希望即使在用户退出应用程序(例如下载)之后该过程仍会继续,那么请使用服务

让我们说你选择2.现在

  1. 您的活动会向您的服务发送Web请求
  2. 您的服务使用Default DefaultHttpClient执行该服务
  3. 它会将数据发送回您的活动.

    这里接收数据的第三步可以通过两种方式完成

1.)广播接收器:多个接收器可以接收您的数据.如果您想要跨应用程序发送数据/通知(比如您还要与fb和twitter进行交互,网络广播的多个接收器),每当您发送广播系统时,都会使用它.

2.)结果接收者:您的应用程序是数据的唯一接收者.它是您实现的接口,并通过putExtra将其传递给intentService.然后,IntentService将获取此对象并调用其receiver.send函数以将任何内容(在bundle中)发送到调用活动.如果您的所有通信都在您的应用程序内部,则结果接收器优先于广播接收器

编辑:我也应该提一下这个警告

警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定).这意味着,如果您的服务要进行任何CPU密集型工作或阻止操作(例如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作.通过使用单独的线程,您将降低应用程序无响应(ANR)错误的风险,并且应用程序的主线程可以保持专用于用户与您的活动的交互.


Rid*_*lly 13

BroadcastReceiver是接收广播的接收器.这些是由某人发送的,意图是可能有许多接收者接收它们(如无线电广播).

另一方面,ResultReceiver旨在从某人接收回调结果.因此,这可以与对讲机进行比较,在那里你打电话给某人然后将从你所呼叫的那个人那里得到答案(结果).