Activity和Fragment通过EventBus进行通信


前言

之前在公司写项目的时候需要用到EventBus来进行通信,自己也稍微学习了一点,对EventBus有一些理解,不足之处还请见谅。

一、EventBus是什么?

  • EventBus(事件总线)是一个Android端优化的 发布/订阅 消息总线。简化了应用程序内各个组件、组件与后台线程间(活动Activity、碎片Fragment、进程Thread、服务Service等)的通信方式。
  • EventBus 三个角色
    Event:事件。可以是任意类型,EventBus根据事件类型进行全局通知。
    Subscriber:事件订阅者。事件方法名任意取名,需要加上注解@subscribe,并指定线程模型,EventBus 3.0 有四种线程模型(订阅者 & 发布者可位于任意线程),分别是:
    POSTING:默认,表示事件处理函数的线程跟发布事件的线程在同一个线程。
    MAIN:表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。若当前线程不是主线程,则通过Handler将消息发送给主线程。
    BACKGROUND:表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。
    ASYNC:表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。
    Publisher:事件发布者。可在任意线程里发布事件

二、使用示例

  1. 引入依赖:implementation 'org.greenrobot:eventbus:3.1.1'
  2. 定义对象
	//定义一个message来进行消息传递
	class MessageInfo(var message: String)
  1. 定义订阅者,注册事件 & 处理事件
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //使用EventBus的接收方法的Activity,需要注册监听
        EventBus.getDefault().register(this)
        })
    }
	
	//这里使用粘性事件
	@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    fun getNetWork(messageInfo: MessageInfo) {
        msg = messageInfo.message
        activity?.runOnUiThread {
            tv_net?.text = msg
        }
    }
	
	override fun onDestroy() {
        super.onDestroy()
        //注销监听
        EventBus.getDefault().unregister(this)
    }
  1. 定义发布者,发布事件
	//调用方法进行发布
	fun refreshNet() {
        val msg: String = getString(R.string.current_net, NetWorkUtils().checkNetworkTypeStr(this))
        var messageInfo: MessageInfo? = MessageInfo(msg)
        EventBus.getDefault().postSticky(messageInfo)
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值