use*_*342 11 java queue multithreading android greenrobot-eventbus
刚开始使用GreenRobot的EventBus.
只有一件事让我苦苦挣扎:你如何在不同的线程之间进行通信,以便onEventXY()方法实际上也在订阅的线程中执行.
似乎当您发布事件时,订阅者onEvent方法是从与发布事件的线程相同的线程调用的.那不是我想要的.
我希望能够使用EventBus进行线程间通信,使得实际接收的事件对象由接收事件对象的线程中的onEvent方法处理.
那可能吗?
例:
MainThread在EventBus上发布一个事件,backGroundThread1在其onEventXY()方法中接收它并在其自己的线程中执行代码(设置一些变量),backGroundThread2在其onEventXY方法中接收它并在其自己的线程中执行代码(设置一些变量).
如果这还不可能(我),我注定要使用线程队列,比如BlockingQueue,这很难实现.
有任何想法吗?
来自 Greenrobot 文档https://github.com/greenrobot/EventBus
BackgroundThread
订阅者将在后台线程中被调用。如果发布线程不是主线程,则将在发布线程中直接调用事件处理程序方法。如果发布线程是主线程,则 EventBus 使用单个后台线程来按顺序传递其所有事件。使用此模式的事件处理程序应尝试快速返回以避免阻塞后台线程。
Async
事件处理程序方法在单独的线程中调用。这始终独立于发布线程和主线程。使用此模式发布事件永远不会等待事件处理程序方法。如果事件处理程序方法的执行可能需要一些时间(例如网络访问),则应使用此模式。避免同时触发大量长时间运行的异步处理程序方法,以限制并发线程的数量。EventBus 使用线程池来有效地重用已完成的异步事件处理程序通知中的线程。
创建回调时,需要添加名称后缀,onEvent如下:
onEventMainThread(YourEvent eventInstance)并且速记onEvent(YourEvent eventInstance)onEventBackgroundThread(YourEvent eventInstance)onEventAsync(YourEvent eventInstance)| 归档时间: |
|
| 查看次数: |
4508 次 |
| 最近记录: |