zoukankan      html  css  js  c++  java
  • AndroidEventBus总结

    什么是AndroidEventBus?

    android事件总线,是一个发布 / 订阅的事件总线

     

    github地址:https://github.com/greenrobot/EventBus

     

    AndroidEventBus的作用?

    AndroidEventBus是一个Android平台轻量级的事件总线框架, 它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。

     

    Android中的Activity, Fragment, Service之间的交互是比较麻烦的,可能我们第一想到的是使用广播接收器来在它们之间进行交互。但使用广播接收器稍显麻烦,如果你要将一个实体类当做数据在组件之间传递,那么该实体类还得实现序列化接口,这个成本实在有点高

     

    题外话: 

    序列化的弊端?

    Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC

    Parcelable不能能使用在要将数据存储在磁盘上的情况,并不是一个通用的序列化机制,当改变任何Parcel中数据的底层实现都可能导致之前的数据不可读取

      

    在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)

    1、onEvent

    2、onEventMainThread

    3、onEventBackground

    4、onEventAsync

     

    onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

     

    onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

     

    onEvnetBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。

     

    onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

     

    基本结构

     

    EventBus的使用

    Gradle:

        compile 'org.greenrobot:eventbus:3.0.0'

     

    Define events:

    public class MessageEvent { /* Additional fields if needed */ }

     

    Prepare subscribers

    Register your subscriber (in your onCreate or in a constructor):

    eventBus.register(this);

    register(this)就是去当前类,遍历所有的方法,找到onEvent开头的然后进行存储。

     

    Declare your subscribing method:

    @Subscribe

    public void onEvent(MessageEvent event) {/* Do something */};

     

    Post events:

    eventBus.post(event);

     

    unregister

    eventBus.unregister(this);

    这是必须的步骤,很多开发者刚开始最容易遗忘的

     

     

    【声明】 

    欢迎转载,但请保留文章原始出处

    博客地址:http://www.cnblogs.com/lping/

    文章来源:http://www.cnblogs.com/lping/p/5470467.html

  • 相关阅读:
    初学c课程笔记整理7-->>二维数组、字符串、指针
    初学c课程笔记整理6-->>数组
    ipad上自定义view的旋转适配
    苹果mac电脑中brew的安装使用及卸载详细教程
    Apple、Google、Microsoft的用户体验设计原则
    iOS图片拉伸技巧
    子网掩码解析【转载】
    Ios8,Xcode6下 设置Launch Image 启动图片
    ios8 设置单元格分割线无效
    简述UIScrollView的属性和用法
  • 原文地址:https://www.cnblogs.com/lping/p/5470467.html
Copyright © 2011-2022 走看看