AEE体系结构分析
来源:互联网 发布:网络运营商怎么关闭 编辑:程序博客网 时间:2024/05/14 01:02
节选自《深入BREW手机游戏开发》
AEE (Application Exection Environment)
Brew构建于手机基础平台(如ASIC)之上,为应用开发提供了一致的称为AEE 的程序运行环境。
AEE的环境基本组织单位是Module(模块), Module是BREW应用开发和部署的基本单位,在Module中包含两种元素。
Applet:BREW应用的基本执行单位, 因为BREW是单线程的,所以,不论一个Module里面有多少个Applet,同一时间只有一个Applet被激活。一个Applet 可以被另一个Applet启动,但在这种情况下,当前的Applet 被暂停,切换到另一个Applet。
Class:这里的Class和面向对象开发语言中的类有一定的区别,AEE中的Class是BREW可以复用的基本单位,而且Class的复用范围并不局限于其所在的 Module,而是整个AEE环境,也就是说,一个Module可以使用其他Module中的Class。Class 的访问点(即一组完成特定功能的API)被称为Interface(接口)。
首先BREW 所有的API 都以Class形式来组织,提供了二十多个包括显示,文件操作,地址簿访问等功能的Interface;同时,BREW容许应用开发者编写自己的Class。
AEECLSID机制
BREW中的每个类或小程序必须拥有一个唯一的ClassID,我们通过MIF编辑器来指定ClassID。后缀为MIF的文件包含支持的类,支持的小程序以及小程序标题。启动时,BREW会在 设备屏幕上列举MIF文件,并保存从MIF列举收集来的信息,以便在请求类时使用。AEE外壳获取这个ID,外壳随后将使用该ID来加载并管理小程序,因此小程序的ID必须唯一。
Interface ClassIDs
每个BREW公共接口都拥有一个可标识自身的唯一ID。这些ID全部被保留不供其他接口或小程序使用,applet可以通过ISHELL_CreateInstance工厂方法来创建某个类的实例。
MODULE 和 APPLET 的创建
Module 的创建
Module 分为两种: 静态和动态。 静态模块由手机生产商直接固化到软件中去并不可移除 ,而动态模块则是通过空中接口进行动态加载。具体到模块的创建过程,两者基本相似,唯一的区别是静态创建的模块必须显式地提供一个CreateInstance 方法给AEEStaticMod_New供创建用。
AEE环境首先通过AEEMod_Load函数调用AEEStaticMod_New函数
Applet 的创建和启动
AEE环境在且仅在下面两种情况下创建Applet的实例
1.响应ISHELL_StartApplet 函数以容许小程序启动。这种情况下将创建小程序,并立即发送
EVT_APP_START事件。通知小程序已经激活并绘制到屏幕。
2.响应注册的通知和警报。这种情况下将创建小程序并立即收到通知的特定事件。
Applet的创建过程如下:
AEE环境通过AEEMod_CreateInstance调用AEEClsCreateInstance,这是每一个BREW应用都必须实现的方法。随后,AEEApplet_New被调用,其中创建了AEEApplet 的实例(AEEApplet派生于IApplet),再将其通过AEEMod_ListAdd加入到当前模块维护的所有Applet列表中去。
调用过程
int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod) --->
return AEEStaticMod_New(sizeof(AEEMod),pIShell,ph,ppMod,NULL,NULL);
--->
static int AEEMod_CreateInstance(IModule *pIModule,IShell *pIShell,
AEECLSID ClsId,void **ppObj)
--->
nErr = AEEClsCreateInstance(ClsId, pIShell, pIModule, ppObj);
--->
boolean AEEApplet_New(int16 nIn,
AEECLSID clsID,
IShell * pIShell,
IModule * pIModule,
IApplet **ppobj,
AEEHANDLER pAppHandleEvent,
PFNFREEAPPDATA pFreeAppData)
----> HandleEvent(AEEApplet * pApp, AEEEvent eCode, uint16 wParam, uint32 dwParam);
- AEE体系结构分析
- AEE-ADAPTIVE Emulation Environment
- AEE函数宏
- ClearQuest体系结构分析
- ClearQuest体系结构分析
- java虚拟机体系结构分析
- Flickr网站体系结构分析
- arcims体系结构分析
- 块设备体系结构分析
- Struts1的体系结构分析
- Android体系结构分析
- JAVA安全体系结构分析
- Android系统体系结构分析
- LVS体系结构分析
- Linux I2C体系结构分析
- 长安.ARM体系结构分析
- mysql体系结构分析
- IBM Rational ClearQuest 体系结构分析
- const的基本用法
- 一个数学天才的情书
- 这几天 vs 我的原则
- OGRE地形配置文件解析
- 初学者学习C++的50条忠告收藏
- AEE体系结构分析
- 防止乱花钱的9个方法
- 中国人应该知道的知识
- log4j
- 匈牙利命名法
- Flex 取得文本(txt)内容,并且输出是汉字
- php的问题
- 19.2 建立逻辑备用数据库
- 试点计划 pilot program