zoukankan      html  css  js  c++  java
  • EventBus--介绍

     

    注意:
    1,post()方法里面的类型和onEvent()中的类型要一致。,
    2,订阅者对象中 必须有 onEvent 的 public 方法     ---public void onEvent(Object event) { //接收消息 }
    3, EventBus是一款针对Android优化的发布/订阅事件总线。
    主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
    在Activity中的onCreate和onDestroy里分别注册和解除注册,并且声明public void onEvent(FirstEvent event) { } 等几个函数就可以了。
    要说明的是EventBus是一个进程范围内的发布/订阅时间总线,所以只能在一个进程内进行订阅和发布,如果你在新的进程里给Service/Activity发送消息,就无法收到消息了。
    本质上来说,EventBus是一个在进程内给不同的类发送消息的事件总线,不论是Activity或是Service都可以。
     
    5,FirstActivity , 注册eventBus, onEvent()方法, SecondAct发送消息: 点击按钮从FirstAct跳到 SecondAct。
    可以在 解决-----在前一个Activity注册的时候,把目标的Activity实例化注册,就可以传参数了.或
    在发送EventBus post请求之前 ,在发送Activity实例化目标Activity (这样:EventBus.getDefault().register(new 目标Activity());)
    或者 重写一个MainApplication里面(EventBus.getDefault().register(new 目标Activity());)。这样就可以啦。
    1. eventbus是必须先订阅,才能传值的,你新activity还没有生成,也就还没有订阅成功,你就post值,肯定是接收不到的。
    2. 先post的,再rigister的,肯定没有获取不到数据。
    3. EventBus要先生产(注册)才能消费(订阅),新的activity没有注册监听,它怎么能收到订阅
    4. 有一个叫delayXXX的方法可以

     

     3,--EventBus 与otto的区别

    3,--EventBus 与 Activity,BraodCast,Service之间传递数据?

    2,-- Event Bus基本用法
     
    分订阅、注册、发布、取消订阅;主体都是谁?
    注册:EventBus提供了三个构造方法
    EventBus.getDefault().register(this);
    EventBus.getDefault().register(new MyClass());
    //三个参数分别为:消息订阅者(接收者),接收方法名,事件类(里面可以定义要传递的属性)
    EventBus.getDefault().register(this, ”setTextA”, TextA.CLASS);
     
    取消注册: 一般都是在ondestory()方法里面进行取消注册,释放资源!取消注册,只需要传递消息订阅者就可以了。
    EventBus.getDefault().unregister(this);
    EventBus.getDefault().unregister(new MyClass());
    EventBus订阅处理数据:
    EventBus支持四种模式,--主线程的数据处理,交互式线程,后台线程和异步线程。
    onEventMainThread(),  onEvent(),   onEventBackgroundThread()。
     
    发布:支持直接发布以及 支持 发布滞留消息:
    EventBus.getDefault().post(对象);
    postStickyEvent();

     

    观察者模式::
    按钮触发监听事件—->EventBus发送消息—->EventBus接收消息—->处理接收到的消息。
    安卓平台上一个用于Activity,Fragment,Thread,Service被优化简化的通讯协议。少代码,高质量
    它自定义事件类的功能特别强大, 有了这样定制消息的功能,我们就可以个性化消息,来对消息进行分类。
    在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
    1、onEvent()
    2、onEventMainThread()
    3、onEventBackground()
    4、onEventAsync()
    该方法将会在同一个线程来调用,避免了线程之间的切换,比如你是在主线程发送的消息,那么将会运行在主线程,如果为其他线程,那么将在其他线程调用。
    // 在相同线程里调用(默认):在onEvent方法中不能执行耗时的操作,如果执行,则导致事件分发延迟。
        public void onEvent(MessageEvent event) {
            log(event.message);
    }
    // 在主线程(UI线程)调用--不论发送事件者在那个线程,接受事件都 将会在主线程调用,
        public void onEventMainThread(MessageEvent event) {
            textField.setText(event.message);   //进行UI操作
    }
    // 接收者直接在后台线程
    如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
       public void onEventBackgroundThread(MessageEvent event){
           saveToDisk(event.message);     //进行耗时操作
       }
    onEventAsync();---使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

     

    1.1 --Event Bus 和 Otto事件总线分发库
    什么是事件总线管理?
    1)将事件放到队列里,通过队列进行事件的管理和分发!
    2)保证应用的各个部分之间高效的通讯及数据、事件分发!
    3)模块之间的解耦! 不用写网络请求接口回调了,直接通过EventBus传递数据。(通过接口回调传递数据、通过EventBus传递数据)
    Event Bus是一个发布/订阅的事件总线。
    Event Bus模式也被称之为Message Bus或者 发布者/订阅者模式,可以让两个组件相互通信,但是它们之间并不相互知晓。有些类似于(广播机制)。
    1)在需要接收信息的地方,进行一个订阅和注册;
    2)在发送数据的地方进行发布
    3)然后在订阅的地方就可以收到,并进行处理。
    基于事件总线管理/订阅/分发模式。事件响应有更多线程选择,EventBus可以向不同的线程中发布事件。
    使用时需要先注册订阅,发布者然后向订阅者分发消息数据即可。
    订阅者可以订阅多个事件,发布者可以发布任何事件;发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。
     
    Event Bus包含四个部分:发布者、订阅者、事件、总线。
    Event Bus分发流程:
    1)发布者首先把它的事件传递到Event Bus事件总线里面进行管理,等待分发;
    2)事件总线按照相应的逻辑,把事件发布给定阅者;
    3)然后订阅者就可以接收到数据(通过对应的方法进行接收),进行相应的处理。
    Event Bus基于标准的命名规范,注解模式比较消耗内存,所以Event Bus效率上要高一些。
    Event Bus支持交互线程的事件传递(支持主线程和子线程的通讯)Event Bus传递效率比较快。基于数据解耦通讯的相关app!
     
    1,--EventBus 基本信息:
     
    compile 'de.greenrobot:eventbus:2.4.0'
    1)使用起来特别简单,但是要懂原理;
    2)要注意使用的步骤和流程;
    3)主要作用:组件之间相互通讯、线程之间相互通讯等
  • 相关阅读:
    CCPC 2017秦皇岛 M Safest Buildings (给一个圆心在原点的大圆R ,以及n个点 在大圆内存在一个小圆r 问那些点同时在两圆的概率最大)
    LightOJ 1366
    Android UI -- 内容简介
    Android 布局优化 -- 学习笔记
    arcgis android 加载google切片 天地图切片 并且能进行缓存
    Eclipse 卸载插件
    Android 不能勾选 Project Build Target
    spatialite-android-library 环境搭建
    HUFFMAN 树
    指示器随机变量
  • 原文地址:https://www.cnblogs.com/awkflf11/p/6028018.html
Copyright © 2011-2022 走看看