到目前为止,BREW(不包括bmp)的所有应用都运行于单一的Task(进程或者线程),所有应用间不具有抢占的特性。各应用的运行是基于协作式的。所谓的协作式,就是应用主动的让度CPU供其他App使用,让度的方式就是BREW的AEECallback机制。
请注意,AEECallback实例必须是长期有效的,不得在堆栈或者寄存器中分配(临时变量),因为BREW Callback的运行是异步的,并且BREW内核不会对AEECallback实例进行备份。
典型的使用为:
1.使用Callback_Init初始化一个AEECallback实例,主要是关联Callback Function和Callback Context Data。
2.调用IShell_Resume向BREW内核Schedule一个AEECallback结构,BREW内部会将其放入BREW的AEECallback队列,并置BREW_SIG,以便下次BREW能被正常调度到。
3.当Schedule的AEECallback还没有被调用时,可以调用Callback_Cancel取消它,BREW内部会从AEECallback队列中删除它。
4.正常情况下,下某次的BREW调度,就会从BREW AEECallback队列中提取出,并执行其Callback Fucntion,同时传递保存的Context Data
5.要查询某个AEECallback是否处于Schedule状态,可以调用Callback_IsQueued
6.注意,当应用退出时,BREW默认不会自动Cancel AEECallback,所以为了避免异常,App退出时,必须Cancel所有的Callback