博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android eventBus
阅读量:4947 次
发布时间:2019-06-11

本文共 1218 字,大约阅读时间需要 4 分钟。

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.

转载于:https://www.cnblogs.com/chhom/p/6076269.html

你可能感兴趣的文章
函数的形参和实参
查看>>
数据科学从业者常见的不良小习惯
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
orcal 主键 外键 约束条件
查看>>
BZOJ 3779 重组病毒 LCT+线段树(维护DFS序)
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
hdu1203 dp背包问题
查看>>
Ubuntu grub2的修复
查看>>
ASP.NET 2.0: 在使用web.sitemap时,如何实现本地化
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
2017-2018-2 20179225 《密码与安全新技术专题》 第6周作业
查看>>
转载:Linux命令行快捷键
查看>>
多个viewpager可能产生的问题
查看>>
webdriver api
查看>>
转载-FileZilla Server源码分析(1)
查看>>
apache 实现图标缓存客户端
查看>>
MediaWiki左侧导航栏通过特殊页面就可以设置。
查看>>
html基础之DOM操作
查看>>
几种图表库
查看>>