BREW後臺應用

在BREW 3.x 版本以前,後臺應用根本不響應suspend和resume事件,也處理有終端用戶相關的交互操作,例如按鍵事件等等。

在BREW 3.x 以後,任何應用都可以對按鍵事件進行處理,可以簡單地通過註冊掩碼爲NMASK_SHELL_KEY的通知來實現。通過ISHELL_StartBackgroundApplet()直接啓動一個後臺應用,後臺應用可以直接處理EVT_APP_START_BACKGROUND 事件而不是EVT_APP_START事件。在BREW 2.x中使一個應用處於後臺運行狀態的方法是,在調用ISHELL_CloseApplet() 且接收到EVT_APP_STOP時, 將 *(dwParam) 設置爲FALSE,例如(*(oolean *)dwParam) = FALSE。

一個BREW應用與後臺應用,或者後臺應用與另一個後臺應用之間一般採用事件傳遞的方式進行通信。終止一個後臺應用的後臺運行狀態有三種情況,第一種是接收到其他應用的發來的事件,一種是後臺應用執行完相關操作後調用ISHELL_CloseApplet()來關閉自己,另一種是後臺應用調用ISHELL_StartApplet()使自己處於前臺運行狀態,然後通過用戶的交互來關閉自己。

下面是BREW2.X中使用後臺應用的示例:

typedef struct _bgApp

{

AEEApplet a;

oolean m_bGoBg; // used to toggle whether to run in background mode

} bgApp;

……

switch (eCode)

{

case EVT_APP_START:

if(pMe->m_bGoBg)

ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE); // send applet to background

return TRUE;

case EVT_APP_STOP:

if(pMe->m_bGoBg)

*((oolean*) dwParam) = FALSE; // set dwParam to run in bg

return TRUE;

case EVT_USER:

if(pMe->m_bGoBg)

{

pMe->m_bGoBg = FALSE;

ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_BGAPP); // make applet active

}else{

pMe->m_bGoBg = TRUE;

// trigger EVT_APP_STOP to send app to background

ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE);

}

return TRUE;

}

 

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