观察者模式之EventBus
基本要素:被观察者Subject要有notify方法,用于遍历观察者Observer,并调用观察者的update方法。观察者要重写update方法。
说明:虽然Java中已经提供了Observer和Observable这两个接口,但是它们并不是最好的选择。因为它们存在一些缺陷,比如Observable是一个类而不是接口,从而限制了被观察者对象的继承层次;同时,Observer接口只提供了一个update()方法,不能够满足复杂的业务需求。因此,在实际开发中,我们可以自己定义Subject和Observer接口。
【EventBus】
demo介绍: 两个页面之间使用eventbus传递信息,第一个页面作为发布者将一些用于ai画图的词语,发送给第二个作图页面,也就是观察者,进行作图


基本步骤:
1.构建事件类

2.在观察者中注册register和解除绑定


3.在观察者中使用@Subscribe(threadMode = )订阅事件

eventbus的线程介绍:
POSTING: 默认模式
表示发送事件 post() 发生在哪个线程,接收事件就发生在哪个线程环境中。
MAIN / MAIN_ODERED: 主线程接收事件
表示无论事件在什么线程环境发布 post(),事件的接收总是在主线程环境执行。
BACKGROUND:
不管post事件发生在那个线程环境, 事件接收始终在一个子线程中执行。
ASYNC:
不管post事件处于哪种线程环境,事件接收处理总是在子线程。
4.被观察者使用EventBus的post方法发送事件。

EventBus缺点
1、使用的时候有定义很多event类
2、event在注册的时候会调用反射去遍历注册对象的方法在其中找出带有@subscriber标签的方法,性能不高。
3、需要自己注册和反注册,如果忘了反注册就会导致内存泄漏