Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从另一个线程调用sendBroadcast()可以吗?_Android - Fatal编程技术网

Android 从另一个线程调用sendBroadcast()可以吗?

Android 从另一个线程调用sendBroadcast()可以吗?,android,Android,我有一个创建线程的服务。此线程执行一些工作,然后调用服务上的sendBroadcast()。这意味着从工作线程调用sendBroadcast(),而不是从运行服务的线程调用 这是否可以,或者我是否应该确保从与服务相同的线程调用sendBroadcast()(通过使用处理程序和可运行) 我在stackoverflow和 据《邮报》报道,应该没问题。我问这个问题的原因是因为这篇文章已经有两年了,也许有些东西已经改变了。另外,我在Android文档中也找不到任何与此相关的内容。这很好。广播被交给And

我有一个创建线程的服务。此线程执行一些工作,然后调用
服务上的
sendBroadcast()
。这意味着从工作线程调用
sendBroadcast()
,而不是从运行服务的线程调用

这是否可以,或者我是否应该确保从与
服务
相同的线程调用
sendBroadcast()
(通过使用
处理程序
可运行

我在stackoverflow和


据《邮报》报道,应该没问题。我问这个问题的原因是因为这篇文章已经有两年了,也许有些东西已经改变了。另外,我在Android文档中也找不到任何与此相关的内容。

这很好。广播被交给Android操作系统,实际上是使用操作系统线程发送的,因此发送广播的线程并不重要。

您已经得到了答案,但也许我可以添加更多

似乎可以从多个线程调用它。无论您从哪个线程调用
sendBroadcast(…)
,它都是onReceive方法(您可能知道)。默认情况下,它在应用程序的主/UI线程上工作。您可以通过
registerReceiver(…)


这就像使用Messenger建立客户机-服务器连接一样。记住所有的消息,不管它们是从哪个线程发送的,都是在一个消息队列中处理的,该队列在一个线程上被消耗/循环。

你怎么知道?这是否在某个地方被记录下来了?做过这件事的经验、Dianne Hackthorn的评论以及API的文档,其中说这个调用是同步的:将给定的意图广播给所有感兴趣的广播接收者。这个调用是异步的;它立即返回,并且在接收器运行时您将继续执行。没有结果从接收器传播,接收器不能中止广播。如果您希望允许接收者传播结果或中止广播,则必须使用sendOrderedBroadcast(Intent,String)发送有序广播。@Kaediil,您在文档中的引用仅表示可以从主应用程序线程调用它(不阻塞),而不表示可以从后台线程调用它。如果两个不同的线程同时尝试广播(通过调用此方法),我们是否会遇到竞争条件的潜在问题?是否已经实施,以便能够处理该案件?