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
Android处理程序-线程间通信_Android_Multithreading_Handler - Fatal编程技术网

Android处理程序-线程间通信

Android处理程序-线程间通信,android,multithreading,handler,Android,Multithreading,Handler,在Android中,如何使用处理程序实现两个线程之间的双向通信 我有一个产生线程B的服务a。从B到a的通信相当容易,只需将处理程序传递给B的构造函数,但是如何从a到B呢?B没有自动分配任何活套 有人知道答案吗?在新线程中调用Looper.prepare(),将为该线程创建Looper。然后您可以创建一个处理程序来传递回另一个线程 也就是说,在调用Looper.prepare()之后,语句Handler h=new Handler()将在新线程的Looper上创建一个处理程序 是一篇很好的文章,介

在Android中,如何使用处理程序实现两个线程之间的双向通信

我有一个产生线程B的服务a。从B到a的通信相当容易,只需将处理程序传递给B的构造函数,但是如何从a到B呢?B没有自动分配任何活套

有人知道答案吗?

在新线程中调用
Looper.prepare()
,将为该线程创建Looper。然后您可以创建一个处理程序来传递回另一个线程

也就是说,在调用
Looper.prepare()
之后,语句
Handler h=new Handler()
将在新线程的Looper上创建一个处理程序


是一篇很好的文章,介绍了线程和使用处理程序的通信。同样,同一个博客也有许多关于Android中各种线程构造的帖子。要解决为刚刚创建的线程(但可能尚未初始化)获取处理程序的问题,请参见,您可以按照以下步骤实现双向通信

1) 创建扩展线程类的工作线程。
2) 使用此工作线程初始化处理程序。
3) 在其run()方法中,准备此线程的循环器:looper.prepare()用于将消息队列绑定到此线程,looper.loop()用于创建一个将从该线程的消息队列读取消息和可运行的循环。

4) 使用Runnables的post()和Messages的sendMessage()将消息和Runnables从UI线程处理程序发送到此工作线程处理程序


请参阅本教程:

完整的答案将建议将新线程的处理程序传递回另一个线程的方法。具体而言,要获取刚创建的HandlerThread的处理程序,请参阅“如何创建循环线程,然后立即发送消息?”:您不应该只提供指向另一个站点的链接作为答案,因为网站可能会在将来过时。相反,请单击此答案上的“编辑”链接,在此处包含该页面中解决方案的基本部分,并提供该链接以供参考。看:谢谢你,彼得。在这种情况下,我维护我链接的博客。所以,如果我更新它,这个答案也会更新。使用HandlerThread可以实现它。看看这篇文章: