最近总结了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还没有初始化,则先接受,在注册,使用粘性事件,但是如果需要接受的已经初始化了,粘性事件可以完成,但是会消耗内存,建议还是正常的去使用。

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

   

更多相关文章

  1. [android]在上下文菜单的选中事件中获取列表选中的元素
  2. android 多点触控
  3. Android解决父控件拦截子控件手势滑动事件的问题
  4. Android下模拟按键输入
  5. android touch事件解析
  6. My Android成长之路(四)——【xml解析之XmlPull】
  7. android中MotionEvent.ACTION_CANCEL事件如何被触发?
  8. Android中的dispatchTouchEvent()、onInterceptTouchEvent()和on
  9. Native Activity讲解

随机推荐

  1. Android 入门笔记 之 网址
  2. 写信息的界面
  3. 初步了解Android
  4. Android(安卓)TextView设置图片技巧
  5. Android studio build inished with non-
  6. 分享android技术牛人博客
  7. Android:解决列表滚动时背景色变黑的方法
  8. Android 文件实现断点上传
  9. ActionBar setDisplayOptions 使用详解
  10. adt-bundle-windows-x86_32-20140702