Android探索与巩固(Kotlin下的EventBus)

栏目: IOS · Android · 发布时间: 5年前

内容简介:这里的示例我用了自己的基类和类主页,显示EventBusActivity,我们首先订阅事件。然后跳转到SecondActivity发送事件。​ EventBus基本用法就是先建立消息事件类,然后注册事件,在Activity中注意最后要取消订阅。然后建立事件订阅者处理事件,要注意线程模式。最后通过事件发布者发布事件,一般使用 EventBus.getDefault().post()发布。如果遇到在发布事件后还没有注册事件的情况,就使用粘性事件处理。

这里的示例我用了自己的基类和类 ARouter 的路由通信,基本大同小异,只需要注意EventBus的用法就好。

  1. 在项目的build.gradle中添加配置:

    implementation 'org.greenrobot:eventbus:3.1.1'
    复制代码
  2. 添加消息事件类:

    class MessageEvent internal constructor(message: String) {
    
        private var message: String? = null
        init {
            this.message = message
        }
        internal fun getMessage(): String? {
            return message
        }
        fun setMessage(message: String) {
            this.message = message
        }
    }
    复制代码
  3. 事件的注册和取消订阅

    class EventBusActivity : BaseActivity<BasePresenter>(){
        val Tag = "EventBusActivity"
        override fun initWidgets() {
            tv_message.text = getString(R.string.EventBusActivity)
            btn_subscription.text = getString(R.string.subscriptionEvent)
            btn_message.text = getString(R.string.jumpToSecond)
        }
    
        override fun setListeners() {
            click(btn_message,btn_subscription)
        }
    
        override fun onWidgetsClick(v: View) {
            when(v){
                //RegisteredEvent
                btn_subscription ->{
                    if (!EventBus.getDefault().isRegistered(this)){
                        EventBus.getDefault().register(this)
                    }else{
                        showToast(getString(R.string.repeatRegistration))
                    }
                }
                btn_message ->{
                    goActivity(Paths.DemoPage.SecondActivity)
                }
            }
        }
    
        override fun bindLayout() = R.layout.activity_eventbus
    
        override fun onDestroy() {
            super.onDestroy()
            //取消注册事件
            EventBus.getDefault().unregister(this)
        }
    复制代码
  4. 事件订阅者处理事件

    @Subscribe(threadMode = ThreadMode.MAIN)
    fun Event(messageEvent: MessageEvent) {
        tv_message.text = messageEvent.getMessage()
    }
    复制代码
  5. 发布事件

    class SecondActivity :BaseActivity<BasePresenter>(){
        override fun initWidgets() {
            tv_message.text = getString(R.string.SecondActivity)
            btn_subscription.text = getString(R.string.sendStickyEvents)
            btn_message.text = getString(R.string.sendEvent)
        }
    
        override fun setListeners() {
            click(btn_message,btn_subscription)
        }
    
        override fun onWidgetsClick(v: View) {
            when(v){
                btn_message ->{
                    EventBus.getDefault().post(MessageEvent(getString(R.string.wish)))
                    finish()
                }
                btn_subscription ->{              EventBus.getDefault().postSticky(MessageEvent(getString(R.string.stickyEvents)))
                    finish()
                }
            }
        }
    
        override fun bindLayout() = R.layout.activity_eventbus
    
    }
    复制代码
  6. 粘性事件

    EventBus的粘性事件与粘性广播类似,就是发送了事件之后再次订阅该事件也能收到。

    @Subscribe(sticky = true)
    fun StickyEvent(messageEvent: MessageEvent) {
        tv_message.text = messageEvent.getMessage()
    }
    复制代码

    订阅粘性事件与上面相同,发送粘性事件在上面的代码中有。

    效果示例

    Android探索与巩固(Kotlin下的EventBus)

主页,显示EventBusActivity,我们首先订阅事件。然后跳转到SecondActivity发送事件。 Android探索与巩固(Kotlin下的EventBus) 点击发送事件 Android探索与巩固(Kotlin下的EventBus) 接下来测试粘性事件,首先我们先不订阅事件,先跳转到SecondActivity,点击发送粘性事件。然后我们发现字样并没有变化。 Android探索与巩固(Kotlin下的EventBus) 这个时候我们订阅事件,会发现字样改变。 Android探索与巩固(Kotlin下的EventBus)

最后总结

​ EventBus基本用法就是先建立消息事件类,然后注册事件,在Activity中注意最后要取消订阅。然后建立事件订阅者处理事件,要注意线程模式。最后通过事件发布者发布事件,一般使用 EventBus.getDefault().post()发布。如果遇到在发布事件后还没有注册事件的情况,就使用粘性事件处理。

​ 用法详解就到这里了,作为一个渴求真相的小程序员,我在之后还要继续在原理上探索EventBus是如何实现的,到时候如果有什么心得也会随时记录。这是我第一次总结第三方框架使用,如有不妥欢迎指正。另外我的 个人总结demo 已经同步更新了,如果博文有不详细的地方可以通过demo进一步理解。


以上所述就是小编给大家介绍的《Android探索与巩固(Kotlin下的EventBus)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法霸权

算法霸权

[美] 凯西·奥尼尔 / 马青玲 / 中信出版集团 / 2018-9-1 / 69.00元

数据科学家凯西•奥尼尔认为,我们应该警惕不断渗透和深入我们生活的数学模型——它们的存在,很有可能威胁到我们的社会结构。 我们生活在一个依赖“算法”的时代,它对我们生活的影响越来越大,我们去哪里上学,我是不是应该贷款买车,我们应该花多少钱来买健康保险,这些都不是由人来决定的,而是由大数据模型来决定的。从理论上来说,这一模型应该让社会更加公平,每一个人的衡量标准都是一样的,偏见是不存在的。 ......一起来看看 《算法霸权》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具