zoukankan      html  css  js  c++  java
  • Android eventBus

    EventBus定义:是一个发布订阅事件的总线,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递信息。

    三要素:

    • Event事件
    • 订阅者
    • 发布者

    四种线程模式:

    • POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程
    • MAIN 表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作
    • BACKGROUND 表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程
    • ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作

    基本用法:

    订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者。

        // Register订阅事件
    //意思是让EventBus扫描当前类,把所有onEvent开头的方法记录下来,如何记录呢?使用Map记录到subscriptionsByEventType,Key为方法的参数类型,Value中包含我们的方法。
    EventBus.getDefault().register(this); // 发布事件
    //调用EventBus.getDefault().post(object)时,EventBus会根据post中实参的类型,去Map(subscriptionsByEventType)中查找对应的方法,最终调用反射去执行我们的方法
    EventBus.getDefault().post(object)); // Unregister取消订阅 EventBus.getDefault().unregister(this);

    订阅事件与发布事件:

    如果方法名以onEvent开头,则代表要订阅一个事件。该事件是由哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。

    onEventMainThread:无论事件在哪个线程发布出来的,始终在UI线程中执行订阅事件的操作,当事件发布的时候,这个方法就会被执行。

    onEventPostThread代表这个方法会在当前发布事件的线程执行

    onEventBackground:这个方法,如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。

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

  • 相关阅读:
    C# 以GZip解压缩
    C# 获取时间戳(支持毫秒)
    C#中 DateTime 转 DateTimeOffset
    C# WPF中 SecureString 转 String
    C# 根据文件头判断文件类型
    C#中 MD5 32位加密
    C#中 Stream转为byte[]
    C#中byte[]转BitmapImage
    sql按天分组
    eclispe报错PermGen space
  • 原文地址:https://www.cnblogs.com/chhom/p/6076269.html
Copyright © 2011-2022 走看看