麻辣烫与安卓主线程工作原理
2016-12-17 18:46
465 查看
前言
一碗麻辣烫
Active Object 设计模式
Active Object
Active Object 模式的优势
安卓主线程工作原理
总结
参考文章
然后类比点餐的过程,讲解 Active Object 设计模式。
最后讨论 Active Object 模式在安卓主线程中的应用。
在麻辣烫店里点餐的流程如下:
顾客进店,到收银台点菜,收银员记录菜品;
顾客拿到号码(对于厨师来说,该号码就是一个顾客),到餐桌等待,不耽误做自己的事情(玩手机、聊天等);
收银员将菜品发到厨房大屏幕;
大厨在大屏幕上看到菜品,向学徒分配任务,学徒开始做菜;
学徒完成做菜,广播号码,顾客取餐;
我们来看下上述过程所涉及的人和物:
顾客,点菜;
收银员,受顾客委托,向厨师发起做菜请求;
被点菜品信号,从收银员传递到厨房大屏幕;
厨房大屏幕,以时间先后顺序显示菜品;
大厨,负责调度,将做菜任务分配给学徒;
学徒,负责具体制作菜肴;
学徒做完麻辣烫,喊号,顾客取餐。
订单
喊号
好了,如果你只对麻辣烫感兴趣,读到这就可以了。
Active Object 关系图(摘自《Active Object - An Object Behavioral Pattern for Concurrent Programming》)
如上图,在 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
店里的顾客有很多(很多客户现场),但厨房(AO 线程)只有一个。
这个现象告诉我们, Active Object 模式能够很好的处理线程的并发和同步。
如果你有幸遇到习大大来吃麻辣烫,那他老人家的饭肯定比你先做好(不论你俩号码的先后顺序是怎样的)。
这个现象告诉我们,Active Object 模式能够灵活的改变处理请求的优先级。
Active Object 模式在主线程中的应用(摘自《Active Object - An Object Behavioral Pattern for Concurrent Programming》)
为了安全,安卓系统只允许在主线程中更新 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 并发模式在 Java 中的应用
Section 3: Module 8: Part 1: the Active Object Pattern
Active Object
Droidcon NYC 2015 - How the Main Thread works
一碗麻辣烫
Active Object 设计模式
Active Object
Active Object 模式的优势
安卓主线程工作原理
总结
参考文章
前言
首先,我们先去点一碗麻辣烫。然后类比点餐的过程,讲解 Active Object 设计模式。
最后讨论 Active Object 模式在安卓主线程中的应用。
一碗麻辣烫
在麻辣烫店里点餐的流程如下:
顾客进店,到收银台点菜,收银员记录菜品;
顾客拿到号码(对于厨师来说,该号码就是一个顾客),到餐桌等待,不耽误做自己的事情(玩手机、聊天等);
收银员将菜品发到厨房大屏幕;
大厨在大屏幕上看到菜品,向学徒分配任务,学徒开始做菜;
学徒完成做菜,广播号码,顾客取餐;
我们来看下上述过程所涉及的人和物:
顾客,点菜;
收银员,受顾客委托,向厨师发起做菜请求;
被点菜品信号,从收银员传递到厨房大屏幕;
厨房大屏幕,以时间先后顺序显示菜品;
大厨,负责调度,将做菜任务分配给学徒;
学徒,负责具体制作菜肴;
学徒做完麻辣烫,喊号,顾客取餐。
订单
喊号
好了,如果你只对麻辣烫感兴趣,读到这就可以了。
Active Object 设计模式
Active Object
开讲安卓主线程工作原理之前,我们先来讲讲 Active Object 模式。Active Object 关系图(摘自《Active Object - An Object Behavioral Pattern for Concurrent Programming》)
如上图,在 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 模式能够很好的处理线程的并发和同步。
如果你有幸遇到习大大来吃麻辣烫,那他老人家的饭肯定比你先做好(不论你俩号码的先后顺序是怎样的)。
这个现象告诉我们,Active Object 模式能够灵活的改变处理请求的优先级。
安卓主线程工作原理
Active Object 模式在主线程中的应用(摘自《Active Object - An Object Behavioral Pattern for Concurrent Programming》)
为了安全,安卓系统只允许在主线程中更新 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 设计模式,及其在安卓主线程中的应用。参考文章
Active Object - An Object Behavioral Pattern for Concurrent ProgrammingActive Object 并发模式在 Java 中的应用
Section 3: Module 8: Part 1: the Active Object Pattern
Active Object
Droidcon NYC 2015 - How the Main Thread works
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件