| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 
 | package com.example.eventbus.utils
 import com.example.gaokao.event.MessageEvent
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.meta.SubscriberInfoIndex
 
 /**
 *
 * @author: xue
 * @description EventBus封装
 * @date: 2019/7/5
 */
 class EventBusUtil {
 companion object {
 /**
 * 使用索引加速
 * 建议在Application中使用
 */
 fun installIndex(index: SubscriberInfoIndex) {
 EventBus.builder().addIndex(index).installDefaultEventBus()
 }
 
 /**
 * 注册
 */
 fun register(subscribe: Any) {
 if (!EventBus.getDefault().isRegistered(subscribe)) {
 EventBus.getDefault().register(subscribe)
 }
 }
 
 /**
 * 取消注册
 */
 fun unregister(subscribe: Any) {
 EventBus.getDefault().unregister(subscribe)
 }
 
 /**
 * 发布一个订阅事件
 * 必须先注册,才能接收到发布的事件,有点类似于 startActivityForResult()方法
 */
 fun postEvent(event: MessageEvent) {
 EventBus.getDefault().post(event)
 }
 
 /**
 * 发布粘性事件(可以先发布事件,在注册后在接收)
 * 粘性事件将最新的信息保存在内存中,取消原始消息,执行最新的消息;
 * 只有注册后,才能接收消息,如果没有注册,消息将保留在内存中。
 */
 fun postStickyEvent(event: MessageEvent) {
 EventBus.getDefault().postSticky(event)
 }
 
 /**
 * 移除指定的粘性订阅事件
 *  @param eventType 事件类型
 */
 fun <T> removeStickyEvent(eventType: Class<T>) {
 var stickyEvent: T = EventBus.getDefault().getStickyEvent(eventType)
 if (stickyEvent != null) {
 EventBus.getDefault().removeStickyEvent(stickyEvent)
 }
 }
 /**
 * 移除指定的粘性订阅事件
 *  @param eventType 事件类型
 */
 fun removeStickyEvent(eventType:Any) {
 var stickyEvent = EventBus.getDefault().getStickyEvent(eventType as Class<Any>?)
 if (stickyEvent != null) {
 EventBus.getDefault().removeStickyEvent(stickyEvent)
 }
 }
 
 /**
 * 移除所有的粘性订阅事件
 */
 fun removeAllStickyEvents(){
 EventBus.getDefault().removeAllStickyEvents()
 }
 
 /**
 * 取消事件
 * 优先级高的订阅者可以终止事件往下传递
 * 只有在事件通过时才能调用(即在事件接收方法中调用)
 *  @param event 事件
 */
 fun cancelEventDelivery(event:Any){
 EventBus.getDefault().cancelEventDelivery(event)
 }
 
 /**
 * 获取 eventbus 单例
 */
 fun getEventBus():EventBus{
 return EventBus.getDefault()
 }
 }
 }
 
 |