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,您在文档中的引用仅表示可以从主应用程序线程调用它(不阻塞),而不表示可以从后台线程调用它。如果两个不同的线程同时尝试广播(通过调用此方法),我们是否会遇到竞争条件的潜在问题?是否已经实施,以便能够处理该案件?