Android 广播接收机是如何工作的?

Android 广播接收机是如何工作的?,android,broadcastreceiver,Android,Broadcastreceiver,我是Android新手,想知道它是如何工作的。具体来说,每个broadcastreceiver是否在单独的线程中运行 如果不是这样,比如说一个计算密集型任务正在接收器外部进行,同时在一个单独的应用程序中,广播正在为接收器发送。那么,当密集型任务结束时,接收方是否有某种队列来管理传入的请求?还是它忽略了这些请求 更具体地说,我正在编写一个应用程序,它将数据发送到服务器,获取响应并监视电池寿命。我有点怀疑broadcastreceiver监控电池寿命的功能在发送电池电量变化的意图时执行 提前感谢您的

我是Android新手,想知道它是如何工作的。具体来说,每个broadcastreceiver是否在单独的线程中运行

如果不是这样,比如说一个计算密集型任务正在接收器外部进行,同时在一个单独的应用程序中,广播正在为接收器发送。那么,当密集型任务结束时,接收方是否有某种队列来管理传入的请求?还是它忽略了这些请求

更具体地说,我正在编写一个应用程序,它将数据发送到服务器,获取响应并监视电池寿命。我有点怀疑broadcastreceiver监控电池寿命的功能在发送电池电量变化的意图时执行

提前感谢您的输入

具体来说,每个broadcastreceiver是否在单独的线程中运行

否。
onReceive()
始终在进程的主应用程序线程上调用

那么,当密集型任务结束时,接收方是否有某种队列来管理传入的请求

您的“计算密集型任务”不应在主应用程序线程上运行,因此不应干扰广播的及时接收

具体来说,每个broadcastreceiver是否在单独的线程中运行

否。
onReceive()
始终在进程的主应用程序线程上调用

那么,当密集型任务结束时,接收方是否有某种队列来管理传入的请求


您的“计算密集型任务”不应在主应用程序线程上运行,因此不应干扰广播的及时接收。

感谢您的回复。我还有一个问题。计算密集型任务正在另一个广播接收器内运行。如何在新线程中启动此接收器?@user2103008:“计算密集型任务正在另一个广播接收器中运行。”——这不是一个好主意。“如何在新线程中启动此接收器?”--这是不可能的。让接收者将“计算密集型任务”委托给可以有后台线程的
服务,例如
IntentService
@commonware-先生,接收者可以工作的最长时间是多少?我已经读到,如果进程很长,如果在接收器中执行,应用程序将给出ANR,并且当应用程序在5秒钟内没有响应时会发生ANR,那么我们是否可以说接收器可以执行进程的最长时间是5秒钟?是的,我知道我们有针对长进程的服务,但我只是想知道持续时间:)。@Rat-a-tat-a-tatratouille:“接收器可以工作的最长时间是多少?”--为了不冻结前景用户界面(如果您恰好在前景中),
onReceive()
应该在一毫秒内返回。换句话说,
onReceive()
与您在主应用程序线程上调用的任何其他方法(例如,
ListAdapter的
getView()
)没有什么不同。低于1毫秒?哇,太快了。。这就是为什么大多数接收器所做的只是接收一个动作,比如电池电量低,不是吗?感谢您的回复:)。我也会记住的。谢谢你的回复。我还有一个问题。计算密集型任务正在另一个广播接收器内运行。如何在新线程中启动此接收器?@user2103008:“计算密集型任务正在另一个广播接收器中运行。”——这不是一个好主意。“如何在新线程中启动此接收器?”--这是不可能的。让接收者将“计算密集型任务”委托给可以有后台线程的
服务,例如
IntentService
@commonware-先生,接收者可以工作的最长时间是多少?我已经读到,如果进程很长,如果在接收器中执行,应用程序将给出ANR,并且当应用程序在5秒钟内没有响应时会发生ANR,那么我们是否可以说接收器可以执行进程的最长时间是5秒钟?是的,我知道我们有针对长进程的服务,但我只是想知道持续时间:)。@Rat-a-tat-a-tatratouille:“接收器可以工作的最长时间是多少?”--为了不冻结前景用户界面(如果您恰好在前景中),
onReceive()
应该在一毫秒内返回。换句话说,
onReceive()
与您在主应用程序线程上调用的任何其他方法(例如,
ListAdapter的
getView()
)没有什么不同。低于1毫秒?哇,太快了。。这就是为什么大多数接收器所做的只是接收一个动作,比如电池电量低,不是吗?感谢您的回复:)。我也会把它锁在我的记忆里。