Android中EventBus(事件总线)传递数据

  最近总结了Android内部传递数据的方法,这是其中的一种,别的方式,请看我的博客(Android中消息传递,看这一篇足够了)。建议大家一起看,对比着学习,内容比较多,但是学Android这些都是必须会的。

   该博客分为几个步骤:1、简介EventBus   2、下载EventBus的地址  3、使用步骤,配置环境

                                       4、粘性事件           5、代码(建议直接看代码 https://github.com/KEYD111/DCEventBus)

    1、首先,EventBus是一个Android端优化的public/subscribe消息总线,简化了应用程序内各组件间,组件与后台线程间的通信,比如请求网络,等网络返回时通过handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。  禁止 两个 Fragment 之间直接通信,定义接口函数回调也不行(试过了)

    2、去Github下载EventBus的包:https://github.com/greenrobot/EventBus

     3、使用步骤   1、添加Jar包到llibs文件夹下 或者是 implementation 'org.greenrobot:eventbus:3.1.1'

                             2、注册 EventBus.getDefault().resister(this);  防止消息泄露

                             3、解注册  EventBus.getDefault().unregiste(this);

                             4、构造发送消息类

                              5、发布消息    EventBus.getDefault().post(new MessageEvent("ssss",dfasfdasf"));

                              6、接受消息
                                          ThreadMode.MAIN  表示这个方法在主线程中执行
                                          ThreadMode.BACKGROUND  表示该方法在后台执行,不能并发处理
                                          ThreadMode.ASYNC 表示后台处理,异步并发处理
                                          ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行

    4、之前说的方法,都是需要先注册register,再post,才能接受到事件,如果使用postSticky发送事件,不需要先注册,也能                        接受到事件
                            1、构造发送消息类
                            2、发布消息  EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"))
                            3、接受消息
                            4、注册  EventBus.getDefault.register(Activity.this)
                            5、解注册

    5、比较 3 4 的方法的差异,3就相当于 B向A订阅事件,A有事件了,B就接受了

                                                 4 是A发送事件了到缓冲区,B想要了,直接去缓冲区拿,不需要先注册,当存在多个Fragment的时候,FragB 向 FragA要数据,可是FragB还没有启动,没办法注册,此时就得使用粘性事件

    6、总结

      使用EventBus的第三方的库,就是发送数据,Activity向Activity中发送数据,fragment 与fragment之间传递数据,不需要向以前那样bundle  intent   解决fragment与fragment之间无法直接通信的问题,Activity与Activity通信之间不会出现问题,有点类似于广播的机制,普通事件和粘性事件的区别:普通事件先注册,粘性事件先接受再注册,个人觉得粘性事件是万能的,因为先放在缓存中,解决了普通事件中,传递数据给Activity/Fragment时,还没有初始化的问题,粘性事件,先将订阅的内容存放在内存中,要用时,注册一下,再取出来使用,但是代价就是内存占用过大,如果需要接受的Activity/Fragment还没有初始化,则先接受,在注册,使用粘性事件,但是如果需要接受的已经初始化了,粘性事件可以完成,但是会消耗内存,建议还是正常的去使用。

    不足之处,请提出您宝贵的意见,侵权之处,请快联系作者。谢谢

   

你可能感兴趣的:(Android学习)