19

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

这可以吗,还是我应该确保从与(通过使用and )sendBroadcast()相同的线程调用?ServiceHandlerRunnable

我在 stackoverflow 和Dianne Hackborns 的帖子上找到了这个

根据帖子应该没问题。我问的原因是因为这个帖子已经有 2 年了,也许有些东西已经改变了。我在 Android 文档中也找不到任何关于此的内容。

4

2 回答 2

21

That is fine. The Broadcast is handed to the Android OS and it is actually sent using OS threads so your thread that sends it does not matter.

于 2012-07-25T19:10:00.797 回答
2

你已经得到了答案,但也许我可以再补充一些。

从多个线程调用它似乎很好。无论您sendBroadcast(...)从哪个线程调用,它都会处理它的 onReceive 方法(您可能知道)。默认情况下,它在您的应用程序的主/UI 线程上工作。您可以通过以下方式更改此行为registerReceiver(...)

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

于 2016-11-08T07:54:51.547 回答