版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/5914168
在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:
*((oolean*) dwParam) = FALSE; // set dwParam to run in bg
case EVT_USER:
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);
}