拿到一个事件并处理。这得基于你的事件队列里面已经有一些待处理的事件,处理事件的节奏是由外部循环控制的。
当你不知道下一个事件什么时候会发生时,就可以对这个队列设定一个监听,当有事件发生的时由队列来调用预先的处理程序。
其实就是 一个观察者模型
当处理事件的时候是否要切换线程?
队列支持单个订阅者还是多个订阅者?
1.
番石榴事件总线
这个库提供了一个谷歌番石榴风格的事件总线。
EventBus 允许组件之间发布订阅式的通信,而无需组件显式地相互注册(从而相互了解)。 它专为使用显式注册取代传统的进程内事件分发而设计。 它不是一个通用的发布-订阅系统,也不是用于进程间通信的。
// Class is typically registered by the container.
class EventBusChangeRecorder {
@subscribe void recordCustomerChange(ChangeEvent e) {
recordChange(e.getChange());
// somewhere during initialization
eventBus.register(new EventBusChangeRecorder());
Dart是基于事件循环机制的单线程模型
一条执行线上,同时且只能执行一个任务(事件),其他任务都必须在后面排队等待被执行。也就是说,在一条执行线上,为了不阻碍代码的执行,每遇到的耗时任务都会被挂起放入任务队列,待执行结束后再按放入顺序依次执行队列上的任务,从而达到异步效果。
单线程模型按照代码编写的顺序,自上而下运行,这是我们所认知的,但是当遇到耗时操作(IO/网络请求)等,会给UI造成卡顿阻...
Stream 顾名思义就是流,简单理解,其实就是一个异步数据队列而已。我们知道队列的特点是先进先出的,Stream也正是如此。
Stream 分为两种,单订阅流(single subscription) 和 广播流(broadcast)。
单订阅流的特点是只允许存在一个监听器,即使该监听器被取消后,也不允许再次注册监听器。
如何创建Stream
Stream.periodic
perio...
直接上代码
StreamController<String> _streamController = StreamController();//创建流Stream 控制器
@override //重写方法,销毁流式通道
void dispose() {
_streamController.close();
super.dispose();
//接收消息
StreamBuilder<String>()
//初始值
initialData