Activity组件的UI实现
2015-11-08 22:38
253 查看
Activity组件的UI实现需要与WindowManagerService服务和SurfaceFlinger服务进行交互
1. Activity组件在启动完成后,会通过一个类型为Session的Binder对象来请求WindowManagerService为它创建一个类型为WindowState的对象,用来描述它的窗口状态
2. Android应用程序会通过一个类型为Client的Binder对象来请求SurfaceFlinger服务为它创建一个类型为Layer的对象,用来描述它的窗口数据。
3. SurfaceFlinger服务为Android应用程序创建一个类型为Layer的对象之后,会返回一个类型为SurfaceLayer的Binder对象给Android应用程序,这样Android应用程序就可以通过这个Binder对象来请求SurfaceFlinger服务来分配图形缓冲区
综合上述信息,我们就可以得到Activity组件与WindowManagerService服务和SurfaceFlinger服务的交互模型,如下图所示:
事实上,用来关联Activity组件和Layer对象的SurfaceLayer对象并不是由Android应用程序请求SurfaceFlinger服务来创建的,而是由WindowManagerService服务请求SurfaceFlinger服务来创建的。WindowManagerService服务得到这个SurfaceLayer对象之后,再将它的一个代理对象返回给在Android应用程序这一侧的Activity组件。这样,Activity组件和WindowManagerService服务就可以通过同一个SurfaceLayer对象来操作在SurfaceFlinger服务这一侧的Layer对象,而操作Layer对象的目的就是为了修改Activity组件的UI。
更详细的请参考老罗的博客: Android应用程序窗口(Activity)实现框架简要介绍和学习计划
1. Activity组件在启动完成后,会通过一个类型为Session的Binder对象来请求WindowManagerService为它创建一个类型为WindowState的对象,用来描述它的窗口状态
2. Android应用程序会通过一个类型为Client的Binder对象来请求SurfaceFlinger服务为它创建一个类型为Layer的对象,用来描述它的窗口数据。
3. SurfaceFlinger服务为Android应用程序创建一个类型为Layer的对象之后,会返回一个类型为SurfaceLayer的Binder对象给Android应用程序,这样Android应用程序就可以通过这个Binder对象来请求SurfaceFlinger服务来分配图形缓冲区
综合上述信息,我们就可以得到Activity组件与WindowManagerService服务和SurfaceFlinger服务的交互模型,如下图所示:
事实上,用来关联Activity组件和Layer对象的SurfaceLayer对象并不是由Android应用程序请求SurfaceFlinger服务来创建的,而是由WindowManagerService服务请求SurfaceFlinger服务来创建的。WindowManagerService服务得到这个SurfaceLayer对象之后,再将它的一个代理对象返回给在Android应用程序这一侧的Activity组件。这样,Activity组件和WindowManagerService服务就可以通过同一个SurfaceLayer对象来操作在SurfaceFlinger服务这一侧的Layer对象,而操作Layer对象的目的就是为了修改Activity组件的UI。
更详细的请参考老罗的博客: Android应用程序窗口(Activity)实现框架简要介绍和学习计划
相关文章推荐
- Arduino智能小车制作报告
- Unknown class ViewController in Interface Builder file
- 大水题--CodeForces - 591A Wizards' Duel
- bzoj1626【Usaco2007 Dec】Building Roads 修建道路
- UItabbarViewController取消默认蓝色与设置标题颜色
- [iOS基础]从使用UIPopoverController到UIViewController弹出模态
- Web前端 - Easy UI的Tree插件和DataGrid插件实战
- WeakReference &&reference quene &&GC
- android 导入module,报failed to find build tools 错解决方案
- Android高级之Volley框架(二):JsonRequest
- 【DP】 HDU 3229 Jinyuetuan Puzzle
- Unable to get setting value Parameter name: profileName
- 接口 ValueStack:com.opensymphony.xwork2.util
- UINavigationController 总结
- __builtin_expect 解惑
- lightoj Answering Queries 1369 (数学转换&&技巧)
- HDU 1560DNA sequence
- 使用VS2010调用QtDesigner设计的UI文件,并实现控件功能
- EasyUI - 后台管理系统 - 增加,删除,修改
- IOS UISwitch 感觉官方提供的拓展性不够好,老感觉这个东西项目中用到需要自己定制