【Android综合编程】CH2EventBus

本文详细介绍了EventBus在Android应用中的使用,包括如何获取、注册、发布普通和粘性事件,以及五种线程模式的区别。重点讲解了粘性事件的特性,以及跨Activity通信的注意事项和线程同步问题。
摘要由CSDN通过智能技术生成

EventBus
获取的时候需要调用EventBus.getDefault():静态方法来得到对象:如果非空直接返回,如果不空,创建对象后返回

注册EventBus:eventBus.register(当前Activity):使得当前activity成为一个订阅者

不可以重复注册(EventBusException):可以在注册的时候加一个判断,来判断是否已经注册

需要在当前activity中定义事件回调方法(定义为public,需要在类间访问):对这个方法使用注解来区分

发布的时候需要定义事件对象来发布对应的事件:setMsg();绑定事件(定义事件对象),post用于发送事件

取消注册:eventBus.unRegister();取消之后就不会再发送了

第二个activity

验证两个activity能不能收到,理论上可以收到,但需要保证activity没有被销毁

注册为订阅者

发布事件的时候有普通事件和粘性事件,此处用的是普通事件

定义事件回调方法(一定要有注解)
(需要从第一个activity中跳转到第二个activity来发送消息)

第一次交互的时候第一个activity发送消息第二个不会受到:因为第二个还没有被创建,但是第二个发送的时候第一个能收到(两个都被创建了),
再返回到第一个的时候,第一个再发送第二个还是收不到:从第二个返回到第一个页面的时候,第二个页面被销毁了

五种线程模式

发布和执行是否在一个线程中

  1. POSTING:订阅者在发布事件的同一个线程中调用,默认的一种线程模式,不能长时间
  2. MAIN:订阅者在主线程(UI)中调用,不能进行耗时操作,(不管是谁发布,都会在主线程中执行)
  3. MAIN_ORDERE:订阅者在Android主线程中排队等待被调用
  4. BACKGROUND:订阅者将在后台线程(不是UI线程)中调用,可以处理耗时任务,但是一般不会这样使用,因为会阻塞发布事件的线程
  5. ASYNC:订阅者方法在单独的线程中调用,始终独立于发布线程和主线程,适用于事件处理程序是耗时的操作,如网络访问
    前三种不能用来执行耗时任务

使用:
@Subscribe(ThreadMode=ThreadMode.ASYNC)

粘性事件

//发布粘性事件
EventBus.getDefault().postSticky(new MessageEvent(“……"));
// 移除指定的粘性事件
removeStickyEvent(Object event);
// 移除所有的粘性事件
removeAllStickyEvents();
// 移除指定类型的粘性事件
removeStickyEvent(Class<T> eventType);
  1. 区别
    普通事件:必须先注册才能收到
    粘性事件:注册之后能收到注册之前发送的粘性事件
  2. 注册之后的订阅者可以两种事件都能收到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值