BREW应用程序的管理

 BREW应用程序的管理以BREW的数据结构为基础,助手函数提供应用程序必要的辅助方法,而IShell接口最为核心。

    BREW中的数据类型使用了许多宏定义或者是typedef,导致其数据类型看起来与标准的 C语言有比较大不同。BREW的数据结构主要有以下4种类型。

    (1)宏定义:这种类型一般的定义都是大写,或者开头几个字母都是大写的。BREW中大量的函数指针及接口的函数调用定位为宏定义。最为重要的ISHELL CreateInstance就是最为典型的宏定义。

    (2)常量定义:BREW中使用#define语句定义的宏。

    (3)结构和联合:一些BREW函数使用结构指针作为输入参数,使用时,必须提供一个结构实例,并在调用函数时传递指向该实例的指针。

    (4)枚举类型:有些BREW变量和结构成员可能需要从枚举结构所定义的有限集中取一定的值。

    BREW的助手函数是类似于C语言的标准库函数,它提供了包括字符串函数、标准C库内存控制函数和一些其他的函数。助手函数和AEE其他函数的区别在于前者的调用不需要接口指针。BREW提供这样的助手函数中的一些是可以直接调用标准C函数库,提供这些函数有以下的原因。

    (1)避免每个应用程序都与标准C库静态连接。如果一个设备上加载多个应用程序,每个应用程序都有包含标准C库的额外负担,AEE通过提供标准C库的单一复制,所有的应用程序都可以使用这个复制。要注意,BREW应用程序是不允许直接调用标准C库函数的。

    (2)避免应用程序包含标准库中的静态数据。标准的C库函数中可能含有静态数据,如果BREW应用程序直接调用将使应用程序无法动态加载。

 

    下面重点介绍IShell接口,它是BREW程序管理的核心。Module和Appllet可以通过IShell获取接口来访问所有的外部服务。IShell接口的函数可以为BREW应用程序提供多种服务,是BREW系统的核心函数,是BREW应用程序的大管家。使用IShell接口,Module和Applet都可以请求指向要求的其他任何接口的指针,每个接口都拥有一个可标识自身的唯一ID(即 ClassID),使用唯一的接口ClassID调用IShell CreateInstance()函数可获取该接口的指针。

    IShell提供的功能大致可以分为:应用程序管理功能、对话框功能、预取设备和应用程序配置功能、通知功能、资源文件和文件处理功能、定时器功能等。我们将在下面简要地介绍这些功能的运用。

    BREW的IShell提供的AEE外壳类应用程序管理函数的功能具体有:创建、启动和终止 BREW类和应用程序;获取设备上模块和类的具体信息;允许应用程序之间相互发送事件:允许运行BREW应用程序,而不干扰设备必须运行的其他程序。    。

    (1)ISHELL——CreateInstance():这是BREW应用程序中最重要和最常用的,用于创建设备模块支持的BREW类实例和用户自定义类的实例,它创建了BREW提供的大部分接口。

    (2)ISHELL StartApplet():用于运行指定的Applet。因为BREW不支持多线程,因此,如果当前有别的Applet在运行,则需要先中止它,然后以EVT APP START事件为参数调用指定的小程序的IAPPLET HandleEvent(),从而最终运行指定的Applet。

    (3)ISHELL_closeApplet():将EVT—APP STOP事件发给当前正在运行的Applet,然后调用其释放函数。ISHELL CloseApplet主要用于AEE外壳自身,因为BREW不允许使用一个Applet来终止另一个Applet的运行。

    (4)ISHELL ActiveApplet():用于获取当前正在运行的那个Applet的ClassID。

    (5)ISHELL_EnumAppletlnit():和ISHELL_EnumNextApplet()都可用于枚举设备模块中的Applet

    (6)ISHELL QueryClass():用于查询设备上是否存在指定的某个类。

    (7)ISHELL SendEvent():用于向指定的类发送事件。如果指定的类不存在,将会首先调用AEE外壳创建一个实例,然后使用指定的参数调用IAPPLET HandlerEvent。

    (8)ISHELL PostEvent()与ISHELL SendEvent()类似,只是它发送的事件不会被立即执行,而是会被排到消息队列的尾部,等待系统的响应。

    (9)ISHELL Busy()用于BREW应用程序确定其设备上是否有其他活动要求它立即退出活动。

    (10)ISHELL Resume():允许应用程序将需要较长时间处理的任务分解为更小的可中断的程序快。每个程序块由回调函数及其相关的数据指针标识。BREW应用程序模型是基于协作的多任务处理设计。因此,每个应用程序在处理事件时只能运行尽可能短的时间,然后退出以便运行设备上的其他程序。

    (11)ISHELL CanStartApplet0:用于检查是否有优先级更高的活动要运行,如果没有就启动当前的BREW应用程序。

    BREW的IShell提供了对话框、消息框和提示功能。BREW的对话框可以由一个或多个 BREW控件组成。对话框允许用户通过输入数据或选择菜单项与设备进行交互。

    (1)ISHELL CreateDialog():用于创建对话框。它不返回所创建的对话框的接口指针。如果创建成功,将在屏幕上显示对话框控件,并将对话框入栈。

    (2)ISHELL EndDiola():用于终止栈顶的对话框。如果栈顶上还有其他对话框存在则会立即显示该对话框。同时,调用此函数时,也会向应用程序发送EVT DIALOG END事件,从而通知应用程序执行由于终止对话框而需要处理的相关程序。

    (3)ISHELL GetActiveDialog():用于获取栈顶的对话框,即当前活动的对话框。因为 ISHELL CreateDialog()并不返回成功创建的对话框的接口指针。

    (4)ISHELL Prompt():用于创建带软件控制的对话框,这个控件非常适合于创建移动终端上的对话框。当用户利用软件按钮与应用程序进行交互时,会发出EVT COMMAND事件同时自动终止该对话框。

    (5)ISHELL MessageBox():用于从BREW资源文件中读取标题和消息文本。

    (6)ISHELL MessageBoxText():用于接收指向代码中指定的标题和消息文字字符串的指针。

    在实际中,由于BREW的对话框用得不多,一般较多使用BREW中的简单控件,如 IDateCtl接口、IMenuCtl接口、ITextCtl接口、ITimeCtl接口等来创建简单的交互控件。

    移动终端在屏幕大小、内存配置等方面的差异很大,在编写应用程序时应该具体注意设备的差异性。如果专门针对每一个设备进行程序开发,在效益上是不值得的:但是仍然需要考虑具体设备的不同,这样才能提高应用程序的健壮性。BREW的IShell提供了用于获取设备及应用程序上的特定配置信息,这样让应用程序自适应地根据具体的设备进行相应的处理,这样才能更好的满足程序开发人员和用户的需求。

    (1)ISHELL GetDevicelnfo():可返回被指向设备的AEE Devicelnfo结构的指针,其中包括该设备屏幕的大小、支持的颜色、可用的内存量、字符编码的方式等一系列相关的信息。

    (2)ISHELL GetDevicelnfoEx():可以用来获取指定条目的信息。

    (3)ISHELL SetPrefs():用于将配置数据指针和该数据的版本号与应用程序的ClassID关联。

     (4)ISHELL SetPrefs():用于获取指定的关联ClassID和版本号。

    BREW的IShell提供了用于事件通知机制,允许BREW类相互通知发生的特定事件。已激活的类要接收事件通知,必须先向AEE外壳注册,指定通知类的ClasslD和通知的事件。当发生需要通知的事件时,通知程序类将调用ISHELL Notify(),向每个已经注册需要响应该事件的类发出通知。

    通知事件类专门用于事件通知,该事件由32位变量表示。其低16位包含通知掩码,每一位都对应一个事件;其高16位包含通知程序匹配值,可用于事件所关联的数据。注册接收通知时,类提供掩码变量值,将其中的每个相关事件都设置为1;如果不再需要某个事件的通知,可以将其掩码变量中该事件的位置设为0。

    (1)ISHELL RegisterNotify():用于设置掩码变量的相应位置为0或为1。

    (2)ISHELL Notify():通知类将调用此函数通知需要处理该事件的所有已注册的类发出通知,AEE外壳将EVT NOTIFY类型事件发送各每个已注册处理该事件的应用程序。这将会使应用程序调用IAPPLET HandleEvent函数。

    另外,用户还可以实现自己的通知类,且该接口必须实现INotifier接口,此接口必须实现类的NOTIFIER SetMask()。

    BREW应用程序的资源包括应用程序需要的字符串、文本文字、图形、图像、声音等,也包括使用BREW MIF Editor创建的BREW资源(以bar为后缀)的文件。BREW提供了为应用程序装载这些资源的方法接口。应用程序可以使用AEE外壳体提供的许多函数从文件中读取各类数据以供使用。

    根据指定的资源ID,可以使用以下的函数来访问BREW应用程序需要的资源。

    (1)ISHELL LoadReslmage():用于从指定资源ID中加载位图图像,并返回该位图的 Ilmage接口指针。

    (2)ISHELL LoadResSound0:用于从指定的资源ID中加载声音资源,并返回该声音资源的ISoundPlayer接口指针。

    (3)ISHELL LoadRes Ojbect():用于实现图像、声音加载的函数。

    (4)ISHELL LoadResString():用于从指定的资源ID中加载字符串资源到字符缓冲区,指向该字符串缓冲区的指针为该函数的一个参数。

    (5)ISHELL LoadResData():用于从指定的资源ID中加载除了字符串和位图图像之外的资源。

    (6)ISHELL FreeResData():用于释放存储资源信息的内存。

    (7)ISOUNDPLAYER Release():用于释放存储声音信息的数据。

    (8)ISHELL Loadlmage0和ISHELL LoadSound()用于直接加载图像和声音资源,而不是首先将它们的内容存入BREW的资源文件。

    BREW的IShell还提供了计时器功能。引用技术不为零的当前实例化应用程序可以使用 AEE外壳的计时器,在指定的时间中执行某项操作。

    BREW的计时器由回调函数和创建计时器时提供的数据结构地址来标识。

    (1)ISHELL SetTimerO或ISHELL SetTimerExO可以用来设置定时器。

    (2)ISHELL CancelTimer0或CALLBACK Cancel()可以在定时器还没到期被触发之前取消计时。

     (3)ISHELL GetTimerExpiration()用于返回指定的计时器在到期之前还剩下多少时间,一般是采用毫秒为单位。

    (4)ISHELL SetAlarm()一般用于计时较长的计时器。

    BREW提供的计时器并不在计时期满时就立即触发相应的操作,而是必须等待当前正在执行的函数执行完毕,也必须等待排在前头的其他计时器的回调函数执行完毕,在系统队列中的计时器回调函数才可能被执行,这是因为BREW平台本身设计的原因。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wmmly/archive/2010/05/24/5620201.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值