BREW手機中的事件處理

BREW是基於事件驅動的,可以通過ISHELL接口中的相關方法發送或接收指定的事件,事件在系統中的分發處理是通過AEE層來實現的。發送事件的方法有ISHELL_SendEvent,ISHELL_PostEvent等,接收特定事件的方法主要是通過ISHELL_RegisterNotify方法來實現,也可以通過MIF文件中的設置完成。如果應用註冊了事件,AEE層在事件發生的時候就會發送EVT_NOTIFY 事件給該應用。

有些事件是不需要註冊的,例如通用的系統事件EVT_APP_START,EVT_APP_STOP,EVT_APP_SUSPEND,EVT_APP_RESUME等等。手機鍵盤事件一般也是不需要註冊的,例如EVT_KEY_PRESS,EVT_KEY,EVT_KEY_RELEASE,EVT_CHAR等,在BREW 3.1之前,只有屏幕上頂層可視的應用能夠接收鍵盤事件,從BREW 3.1開始,所有應用都可以接收鍵盤事件。如果不是手機屏幕上頂層可視的應用,必須要註冊 NMASK_SHELL_KEY 通知才能接收到相關的鍵盤事件。

控件事件一般以EVT_CTL爲前綴命名的,例如EVT_CTL_TAB,EVT_CTL_ADD_ITEM等,對話框事件一般以EVT_DIALOG爲前綴命名的。如果應用使用控件或者對話框,一般要對相關的事件進行處理。對告警事件的設定一般有兩種方法ISHELL_SetAlarm和IALARMMGR_SetAlarm,當告警時間來臨的時候,EVT_ALARM 事件將被髮送給該應用,EVT_ALARM事件類型是通過掩碼來區分的。

事件的消息隊列並沒有優先級,所有的事件都具有相同的優先級,也就是系統對所有的消息都看作是相同優先級的,必須一個消息等待處理完畢即事件處理方法返回後,才能夠處理另外的消息。因此編寫的應用程序必須及時接收並處理來自系統的事件消息,並且把控制權及時地返回系統,這樣才能保證應用程序的正常運行。如果程序中某個事件的處理方法長時間的運行而不能及時返回系統響應其它系統事件,AEE將會認爲是系統發生錯誤,爲了避免破壞系統,設備將選擇強制性重新啓動。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章