我在几个网站上查了但是我找不到这个问题的答案。
我有一个UI线程,它以特定频率调用带有alarmManager的服务。 并且服务本身调用另一个启动服务器/客户端线程的IntentService。我想知道是否可以使服务器/客户端线程与UI线程通信?
非常感谢你的帮助。
答案 0 :(得分:0)
始终在UI线程上执行IntentService.onCreate()
方法。您可以在该方法中创建新的Handler
实例,并将其存储在IntentService
实现的实例或类数据成员中。您可以使用此Handler
到post(Runnable)
在UI线程上执行,或sendMessage(Message)
将在您的handleMessage(Message)
实施中在UI线程上处理。为简单起见,我建议坚持使用post(Runnable)
。
根据您的评论进行更新:
假设您的后台线程自己进行连续处理并且没有looper,最简单的方法是创建一个队列(例如ArrayList<MyLocation>
可以工作),并将每个新位置添加到尾部它来自UI线程。同时,后台线程从头部选择下一个位置并按预期处理它。这是两个线程之间进行通信的一种非常简单的异步方式(基本上是Looper
和Message
工作方式的简化版本。)
然而,这种方法的主要缺点是你的后台线程总是很忙,因此如果没有传入的位置更新,则会减少CPU资源。更好的选择是将后台线程更改为Looper线程并向其发送消息。以下是Create Looper thread and send a Message to it的示例。