【问题标题】:Communication between two threads, thread communication over resultreceiver两个线程之间的通信,线程通信通过resultreceiver
【发布时间】:2016-01-07 21:33:14
【问题描述】:

我有两个问题,我希望你能在没有我的代码的情况下给我一个解决方案,因为它还不存在!

第一个问题: 我如何在 2 个线程之间进行通信,例如从 thread1 发送整数或字符串到 thread2 的最简单方法是什么?

第二个问题: 有没有办法通过结果接收器在 Activity 和 Thread 之间进行通信,当 Thread 由 Service 启动时,由 Activity 启动?

感谢您的建议!

【问题讨论】:

  • 关于不存在的代码的问题其实不在StackOverflow的范围内,但是...
  • ...在两个线程之间进行通信的最通用方式可能是让它们共享一个阻塞队列(或者如果您想要双向通信,则共享两个队列)。还有其他更专业的方法。查看java.util.concurrent 包中的一些。抱歉,我不知道任何 Android 细节。

标签: java android multithreading


【解决方案1】:

不幸的是,您的问题对我们来说并不是那么有用,(我们首先需要代码等)但我恰好能够给出“广泛”的答案......

第一个问题:“最简单”的方式……完全是主观的……

首先,您在 Android 上有很多选择(甚至不仅仅是普通的 Java)...

你可以使用标准的 java 并发东西...

您可以使用 Android 的 HaMeR(处理程序、消息和 Runnables)(命名自我的博士生导师 Dr Schmidt,他有几门可以免费观看的在线 CS 课程。(播放列表标题:CS 282 (2014): Concurrent Java Network Programming in Android 和 @ 987654324@)

android 上的并发可以使整个大学课程成为一个强烈指标,表明该主题有多复杂......

取决于您希望线程如何通信...我个人建议在 UI 线程中创建一个自定义处理程序并将该引用提供给线程(如果它们向 UI 线程报告结果)或制作一个每个线程中的处理程序并让另一个线程引用它。 (从而为线程提供了一种来回异步通信的机制。)

detailed video explaining Handlers

“简单”在这里是主观的......

第二个问题:

您不会与服务背后的“线程”通信...您将启动服务并与服务通信。然后,该服务将与它所控制的线程进行通信。

我个人会推荐带有自定义回调的单向异步 AIDL 来设置服务(但这是一种相当高级的方法(我不会再使用任何其他方式来绑定服务,因为其他方式都非常逊色在我看来))

但是,在您达到这一点之前,我建议您只遵循第一个问题的方法,即制作允许您来回传递消息的处理程序,然后让服务在获取结果时将结果“报告”给 Activity (来自一个或多个线程)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多