将数据从UI线程发送到另一个线程,该线程不是由主活动“Android”创建的

时间:2013-12-28 13:33:46

标签: android multithreading service looper

我在几个网站上查了但是我找不到这个问题的答案。

我有一个UI线程,它以特定频率调用带有alarmManager的服务。 并且服务本身调用另一个启动服务器/客户端线程的IntentService。我想知道是否可以使服务器/客户端线程与UI线程通信?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

始终在UI线程上执行IntentService.onCreate()方法。您可以在该方法中创建新的Handler实例,并将其存储在IntentService实现的实例或类数据成员中。您可以使用此Handlerpost(Runnable)在UI线程上执行,或sendMessage(Message)将在您的handleMessage(Message)实施中在UI线程上处理。为简单起见,我建议坚持使用post(Runnable)

根据您的评论进行更新:

假设您的后台线程自己进行连续处理并且没有looper,最简单的方法是创建一个队列(例如ArrayList<MyLocation>可以工作),并将每个新位置添加到尾部它来自UI线程。同时,后台线程从头部选择下一个位置并按预期处理它。这是两个线程之间进行通信的一种非常简单的异步方式(基本上是LooperMessage工作方式的简化版本。)

然而,这种方法的主要缺点是你的后台线程总是很忙,因此如果没有传入的位置更新,则会减少CPU资源。更好的选择是将后台线程更改为Looper线程并向其发送消息。以下是Create Looper thread and send a Message to it的示例。