EventBus快速入门(简单易懂篇)

前言:

       在以往的项目中,一般的监听事件,回调,activity之间的通信  与Frament的通信  我一般都是使用观察者模式。

1.写接口  传对象  设置方法回调。。。。。代码多 不够简洁。。所以决定使用EventBus

概念:

  **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过**EventBus**实现。

作为一个消息总线,有三个主要的元素:

Event:事件

Subscriber:事件订阅者,接收特定的事件

Publisher:事件发布者,用于通知Subscriber有事件发生

好了 不多话 直接撸代码

准备工作  直接build.grade依赖

在需要订阅的地方


在销毁的地方进行销毁

定义接受事件的类型和发生的线程(有四种形式)

接受类型是String  发送类型也应该 String   如果发送了一个对象  这里就接受不到信息

注意:在栈中(生命周期还存在的Activity和Fragment) 发送消息后  如果接受类型和发送类型一致,订阅的地方是都能收到事件。

好啦  接下来  说些简单的用法吧

1.在同一组件中发送和接受消息

就是这么的简单   订阅  发送事件  类型统一能接受到  不统一不行  接收到信息在哪个线程处理也是你喜欢的。。

2.用法二。上面是发送的String类型,但是我是建议传递的是一个自定义的对象,可以用对象来做标识,加个type  在接受的时候做判断 ,进行想处理的订阅的地方响应


3.在不同组件页面发送消息和接受消息和同一组件中是一致。。。。发送消息组件中不需要订阅和销毁   只需要调用,然后接受的处理就行咯


好啦  我的渣渣文章也写了接近尾声了   其实EcentBus使用起来很简单的 。。。。

接下来说下更多实用的效果:


一 前面说过在EventBus中有4种线程控制的方式:  现在来介绍一下吧、

1。POSTING:同步模式  很简单也就是 你是什么我就是什么 , 发送消息是什么线程,接受信息就到什么线程中,线程一致  你是在主线程中发送 我就在主线程中接受 ,你在子线程中发送  ,我也在和发送同一个子线程中接受

2.MAIN:主线程模式,无论发送事件是在那个线程发送,接收事件一定会在主线程中执行。这样刚好就解决了只能在主线程中更新UI的问题。。

3.BACKGROUND:后台线程模式,如果发送事件的是在主线程中发送,接收事件就会在新建一个子线程中执行。发送事件是在子线程中执行,接收事件就会在发送事件的子线程中执行,同一子线程。这种模式适合处理耗时任务。

4.ASYNC:新线程模式,无论发送事件是在何种线程执行,接收事件一定会新建一个子线程去接收。

在子线程中发送消息  4种线程的方式的结果如下。。代码就不上了 自己撸撸代码有感觉哦

二,优先级的问题

          我们如果有场景 同一页面中需要有先后的事件处理方式,并且有关联的数据联系的话,可以设置订阅事件处理的优先级。通过设置每个接收事件方法的优先级@Subscribe(priority = 1)开控制接收方法的先后。。priority数值越大  优先级越大


三。粘性事件

      在EventBus中  可以先发送事件 后在订阅  通过设置也能接收到信息  通过设置@Subscribe(sticky = true)去指定  发送的时候也必须是.postSticky()类型才行


四。拦截事件。。

          可以在方法内通过cancelEventDelivery()截断事件的传递。。。。场景的话自己看需求咯

但是注意的是 接受到的线程中想取消事件  必须在Posting中 否则会报错的哦

五。速度提升(要关联apt在bulid中设置 大家自己去研究下吧)不过我在项目中也没有加  哈哈


哈哈哈  EventBus的使用和基本的方法也说完  我理解的不够透彻  欢迎大神们指点  文章中有说的不好的 或者有问题的可以提出来  大家一起学习进步  我就是个渣渣 说的不好 敬请原谅 。。。。

愿我们一起成长 一起努力  享受这Android的神奇之旅,为人生的旅途增加更多的风采。  谢谢!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,395评论 25 707
  • EventBus源码分析(一) EventBus官方介绍为一个为Android系统优化的事件订阅总线,它不仅可以很...
    蕉下孤客阅读 3,972评论 4 42
  • 对于那些还不知道火,电,刀具,塑料袋,有多危险的幼童,收纳不当,肮脏凌乱的厨房是个相当危险的地方。 他们可...
    kitty的幸福生活阅读 94评论 0 0
  • 01 因为不能天生丽质,所以只能天生励志。 在这个现实的社会里,你不得不承认,姣好的容貌会为你带来很多的机会,这就...
    丑妹阅读 16,901评论 142 363