RxAndroidBLE 源码分析:队列管理

工作队列的管理

抽象

对蓝牙的相关操作,作者将其抽象为一个个操作流程。

runnable.png

为了形象直观一些,我称这个流程为熊孩子:
你有一堆熊孩子,这些熊孩子都有自己的想法,爱调皮捣蛋。那么这一堆熊孩子该怎么管理呢?

如何管理这一堆流程呢?

用队列管理着一群熊孩子

阻塞队列

Paste_Image.png

RxAndroidBLE 中使用的是 PriorityBlockingQueue。他包装了一下:

PriorityBlockingQueue:这个队列中的每个对象可具有优先级的
按什么优先级?你的对象实现 Comparable即可。如作者实现的:

  1. 根据 RxBleRadioOperation 的优先级比较结果
  2. 再根据 每个操作的入队的自然顺序。

入队

  1. 订阅时入队。
  2. 取消订阅时出队。
  3. 操作的执行,会生产一堆东西。asObservable:得到被观察者。

队列的执行控制?

当一个任务出队,被执行完毕后,再从队列中取出下个任务来执行。

看一下RxAndroidBLE 中队列的管理:

Paste_Image.png
  1. 开启单独的一个线程,这个线程来维护这个优先级队列。
  2. 线程如何来控制任务的执行?通过信号
    信号量:线程的执行需要在信号量提供许可证的前提下才能继续执行。而这个许可证由具体的熊孩子来释放许可。

细看操作流程:RxBleRadioOperation

1. 他是一个执行流程:
runnable
run
  1. 生产出错:就发射错误异常给消费者。
  2. 生产实现:
protected abstract void protectedRun() 
2. 它管理者事件的生产与订阅。

它持有 replaySubject,通过replaySubject 你想发布东西,订阅东西就很简单啦!

ReplaySubject

看一个具体的实现来热热身:
RxBleRadioOperationScan 中的生产实现:


生产的 蓝牙设备信息:

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,683评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,663评论 25 708
  • 腊月十六,我们正忙的时候,店里的师傅发微信留言:你可以为了自己的利益而加班加点 我也可以为了我的私欲而去做出...
    旭凯阅读 228评论 0 0
  • 春风微微荡漾 舞蹈千万朵绚烂的金黄 它们一起摇曳腰肢 细而柔软 蜜蜂追着黄蝶 总是迷失方向 我呼吸着淡淡的清香 整...
    陌上牧笛阅读 154评论 0 0