麻辣烫与安卓主线程工作原理

前言

首先,我们先去点一碗麻辣烫。
然后类比点餐的过程,讲解 Active Object 设计模式。
最后讨论 Active Object 模式在安卓主线程中的应用。

一碗麻辣烫

在麻辣烫店里点餐的流程如下:

  1. 顾客进店,到收银台点菜,收银员记录菜品;
  2. 顾客拿到号码(对于厨师来说,该号码就是一个顾客),到餐桌等待,不耽误做自己的事情(玩手机、聊天等);
  3. 收银员将菜品发到厨房大屏幕;
  4. 大厨在大屏幕上看到菜品,向学徒分配任务,学徒开始做菜;
  5. 学徒完成做菜,广播号码,顾客取餐;

我们来看下上述过程所涉及的人和物:

  • 顾客,点菜;
  • 收银员,受顾客委托,向厨师发起做菜请求;
  • 被点菜品信号,从收银员传递到厨房大屏幕;
  • 厨房大屏幕,以时间先后顺序显示菜品;
  • 大厨,负责调度,将做菜任务分配给学徒;
  • 学徒,负责具体制作菜肴;
  • 学徒做完麻辣烫,喊号,顾客取餐。

好了,如果你只对麻辣烫感兴趣,读到这就可以了。

Active Object 设计模式

Active Object

开讲安卓主线程工作原理之前,我们先来讲讲 Active Object 模式。
在 Active Objective 模式中,有两个线程:客户线程和 Active Objective 线程(以下简称 AO 线程),相当于于顾客和厨房。

在客户线程中,有两类角色:

  • Client,调用方,请求的发起者,相当于顾客;
  • Proxy,受调用方的委托向 Active Object 线程发起请求,相当于收银员;

AO 线程由以下部分组成:

  • Method Request,客户进程发出的方法请求,相当于在收银员和厨房大屏幕之间传递的菜品信号;
  • Activation List,方法请求列表,相当于厨房大屏幕;
  • Scheduler,调度器,负责调度、执行请求,相当于大厨;
  • Servant,实现了 method_1 和 mothod_2 等方法,具体执行方法请求,从调度器接收任务,相当于学徒;
  • Future,相当于顾客点菜时取到的号码,用于回调。

综上,Active Object 模式中由如下几个部分组成:

  • Proxy
  • MethodRequest
  • Activation List
  • Scheduler
  • Servant
  • Future

Active Object 模式的优势

该模式主要的应用场景是,在一个线程中调用其他线程中的方法,有效的隔离方法的调用和执行。

店里的顾客有很多(很多客户现场),但厨房(AO 线程)只有一个。
这个现象告诉我们, Active Object 模式能够很好的处理线程的并发和同步。

如果你有幸遇到 VIP 来吃麻辣烫,那他的饭肯定比你先做好(不论你俩号码的先后顺序是怎样的)。
这个现象告诉我们,Active Object 模式能够灵活的改变处理请求的优先级。

安卓主线程工作原理

为了安全,安卓系统只允许在主线程中更新 UI。但是在实际开发中,我们会遇到在非主线程中更新 UI 的情况:我们把耗时操作(如网络请求)放在一个后台线程中处理,需要实时去更新 UI 界面中进度条。

既然在后台线程中直接不能更新 UI,总得给出一个间接更新的方法啊。

解决方案就是 Handler,在后台线程中通过 Handler#sendMessage() 发出更新 UI 的请求到主线程消息队列(MessageQueue),而在主线程中控制器 Looper 收到执行更新 UI 的请求后执行对应的方法(Handler#handleMessage()),从而在主线程中更新 UI。

Handler 模型与 Active Object 模式不完全一致,而是它的一个变形。Handler 既是 Proxy,又是 Servant。

而且,更新 UI 操作没有返回值,故 Handler 模型中没有 Future。

所以,Active Object 模式中的角色和主线程中的各个部分的对应关系如下:

  • Proxy,Handler#sendMessage()`;
  • Method Request, Message,Runnable;
  • Activation List,MessageQueue;
  • Scheduler,Looper;
  • Servant,Handler#handleMessage();

总结

本文类比麻辣烫,简单讲述了 Active Object 设计模式,及其在安卓主线程中的应用。

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值