0

在BroadcastReceiver和IntentService的职责中有一些重叠是否正确?因此,我的意思是设置一个触发IntentService的BroadcastReceiver将会是多余的,它执行一些需要完成的任务。由于两者都响应意图,只有IntentService直接响应意图而没有将BroadcastReceiver作为中介,这更简单。在BroadcastReceiver和IntentService的职责中重叠

这个解释是否正确?它总是正确的吗?如果不是,请举例说明什么时候不正确。

非常感谢!

回答

1

我的意思是,这将是多余的设置触发,其执行需要完成一些任务的IntentService一个BroadcastReceiver

不仅是不一定是多余的,它是一种很常见的模式。

这个解释是否正确?

请给当它是不正确的例子。

任一个Intent使用具有sendBroadcast()startService()。如果IntentsendBroadcast()一起使用,则服务不可能直接对其进行响应。同样,如果IntentstartService()一起使用,接收器不可能直接响应它。因此,在其他人编写代码来使用Intent的情况下,您必须匹配他们如何使用它。您不能单方面“更改频道”,即使用Intent

除此之外,总是在主应用程序线程上调用BroadcastReceiveronReceive()。你不想在这里花费任何有意义的时间,因为如果你的用户界面恰好在前台,它会冻结你的用户界面。而且,一旦onReceive()返回,清单注册的接收者实例将被丢弃,并且您的过程可能会在此后不久被终止。因此,BroadcastReceiver不支持自己的后台线程,因为Android会忽略该线程并终止您的进程。响应系统发送的广播的常见模式是使用BroadcastReceiver,然后让它将作品委托给IntentService。在一举,你解决这两个问题:

  • IntentService做了繁重的onHandleIntent(),呼吁在后台线程
  • ,因为它是一个Service,有它运行,而这样做的工作就会发信号给OS让你的过程是短暂的人生,而不再

现在,如果你是一个创建Intent,你是一个调度是Intent,你是一个耗时的是Intent,你希望你的代码中使用startService()直接调用IntentService,那是非常好的。