Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 将数据从UI线程发送到主活动未在中创建的另一个线程";安卓;_Android_Multithreading_Service_Looper - Fatal编程技术网

Android 将数据从UI线程发送到主活动未在中创建的另一个线程";安卓;

Android 将数据从UI线程发送到主活动未在中创建的另一个线程";安卓;,android,multithreading,service,looper,Android,Multithreading,Service,Looper,我查看了几个网站,但没有找到这个问题的答案 我有一个UI线程,它使用alarmManager以特定频率调用服务。 服务本身调用另一个IntentService,它启动一个服务器/客户端线程。我想知道是否有可能使服务器/客户端线程与UI线程通信 非常感谢您的帮助。该方法始终在UI线程上执行。您可以在该方法内创建一个新实例,并将其存储在IntentService实现的实例或类数据成员中。您可以使用此处理程序在UI线程上执行,或者由您的实现在UI线程上处理。为了简单起见,我建议坚持使用post(Run

我查看了几个网站,但没有找到这个问题的答案

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

非常感谢您的帮助。

该方法始终在UI线程上执行。您可以在该方法内创建一个新实例,并将其存储在
IntentService
实现的实例或类数据成员中。您可以使用此
处理程序
在UI线程上执行,或者由您的实现在UI线程上处理。为了简单起见,我建议坚持使用
post(Runnable)

根据您的评论更新:

假设您的后台线程自己进行连续处理,并且没有循环器,最简单的方法是创建一个队列(例如,
ArrayList
),然后从UI线程将每个新位置添加到队列的尾部。同时,背景线程从头部拾取下一个位置,并按预期进行处理。这是两个线程之间非常简单的异步通信方式(本质上是
活套
消息
工作方式的简化版本)


但是,这种方法的主要缺点是后台线程总是很忙,因此如果没有传入的位置更新,就会占用CPU资源。更好的选择是将后台线程更改为循环线程并向其发送消息。以下是如何将服务绑定到活动的示例。

您可以将服务绑定到您的活动。谢谢您的回答。在我的例子中,主活动中有一个位置侦听器,当onlocationchanged()发生变化时,我希望将新位置发送到IntentService启动的线程服务器/客户端。如果我的处理程序是在Intentservice中创建的,而不是在UI线程中创建的,这怎么可能呢?