【问题标题】:Android Handlers - inter-thread communicationAndroid Handlers - 线程间通信
【发布时间】:2011-08-05 04:54:05
【问题描述】:

Android中如何用Handlers实现两个线程之间的双向通信?

我有一个服务 A,它产生线程 B。从 B 到 A 的通信相当容易,只是将一个 Handler 传递给 B 的构造函数,但是如何从 A 到 B 呢? B 没有自动分配任何 Looper。

有人回答了吗?

【问题讨论】:

标签: android multithreading handler


【解决方案1】:

在新线程中调用Looper.prepare(),将为您创建该线程的 Looper。然后你可以创建一个 Handler 传回给另一个线程。

即调用Looper.prepare()后,Handler h = new Handler()语句会在你的新线程的Looper上创建一个Handler。

http://developer.android.com/reference/android/os/Looper.html

【讨论】:

  • 一个完整的答案将建议一种将新线程的处理程序传递回另一个线程的方法。
  • 具体要获取刚刚创建的HandlerThread的handler,参见“如何创建Looper线程,然后立即发送消息?”:stackoverflow.com/questions/4838207/…
【解决方案2】:

Here 是一篇很好的文章,解释了使用处理程序的线程和通信。此外,同一个博客有许多关于 Android 中各种线程构造的帖子

【讨论】:

  • 您不应该只提供指向另一个站点的链接作为答案,因为该站点将来可能会过时。相反,请单击此答案上的“编辑”链接,在此处包含该页面中解决方案的基本部分,并提供链接以供参考。见:meta.stackexchange.com/q/8259
  • 谢谢彼得。在这种情况下,我维护我链接的博客。所以,如果我更新它,这个答案也会更新。
【解决方案3】:

要克服为刚刚创建的线程(但可能尚未初始化)获取处理程序的问题,请参阅How to create a Looper thread, then send it a message immediately?

【讨论】:

    【解决方案4】:

    您可以按照以下步骤来实现双向通信。

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

    4) 使用 post() for runnables 和 sendMessage() for Messages 将 UI Thread 处理程序中的 Messgae 和 Runnables 发送到此工作线程处理程序。

    请参考本教程:Handle background work using Looper

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多