gpt4 book ai didi

java - 使用 GreenRobot EventBus 在线程之间进行通信

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:04 31 4
gpt4 key购买 nike

刚开始使用 GreenRobot 的 EventBus .

只有一件事让我苦苦挣扎:如何在不同线程之间进行通信,以便 onEventXY() 方法实际上也在订阅的线程中执行。

似乎当您发布事件时,订阅者的 onEvent 方法是从与发布事件的线程相同的线程中调用的。这不是我想要的。

我希望能够使用 EventBus 进行线程间通信,实际接收到的事件对象由接收到事件对象的线程中的 onEvent 方法处理。

这可能吗?

例子:

  • 主线程
  • backGroundThread1
  • backGroundThread2

MainThread 在 EventBus 上发布一个事件,backGroundThread1 在它的 onEventXY() 方法中接收它并在它自己的线程中执行代码(设置一些变量),backGroundThread2 在它的 onEventXY 方法中接收它并在它自己的线程中执行代码(设置一些变量)。

如果这不可能(目前),我注定要使用线程队列,例如 BlockingQueue,它更难实现。

有什么想法吗?

最佳答案

来自 https://github.com/greenrobot/EventBus 的 Greenrobot 文档

BackgroundThread
Subscriber will be called in a background thread. If posting thread is not the main thread, event handler methods will be called directly in the posting thread. If the posting thread is the main thread, EventBus uses a single background thread that will deliver all its events sequentially. Event handlers using this mode should try to return quickly to avoid blocking the background thread.

Async
Event handler methods are called in a separate thread. This is always independent from the posting thread and the main thread. Posting events never wait for event handler methods using this mode. Event handler methods should use this mode if their execution might take some time, e.g. for network access. Avoid triggering a large number of long running asynchronous handler methods at the same time to limit the number of concurrent threads. EventBus uses a thread pool to efficiently reuse threads from completed asynchronous event handler notifications.

创建回调时,需要在onEvent中添加名称后缀,如下所示:

  • onEventMainThread(YourEvent eventInstance) 和简写 onEvent(YourEvent eventInstance)
    总是分派(dispatch)到主 UI 线程
  • onEventBackgroundThread(YourEvent eventInstance)
    这个最适合你的问题
  • onEventAsync(YourEvent eventInstance)
    总是在一个新线程中,如果你从这里分派(dispatch)大量事件是有风险的,很容易触发线程异常

关于java - 使用 GreenRobot EventBus 在线程之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951485/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com