| 類型 | 駐留位置 | 使用者互動 | 狀態切換 |
|---|---|---|---|
| 啟用 | 應用堆疊頂端 | 直接螢幕/按鍵互動 | Suspend/Resume 事件 |
| 暫停 | 應用堆疊之下層 | 無直接互動 | 被上層應用遮蓋 |
| 後台 | 堆疊外部 | 無直接互動 | EVT_APP_STOP 設 dwParam=FALSE |
// 啟動:同一般應用,ISHELL_StartApplet 或選單啟動
// 進入後台關鍵:處理 EVT_APP_STOP
case EVT_APP_STOP:
if (pMe->m_bGoBackground) {
*((boolean*)dwParam) = FALSE; // 關鍵:告訴 BREW 不要卸載,放入後台
return TRUE;
}
break;
// 主動結束後台應用 (兩種方式)
ISHELL_CloseApplet(pIShell, FALSE); // 只關閉自己
// 或
ISHELL_PostEvent(pIShell, AEECLSID_BGAPP, EVT_USER, 0, 0); // 發送自訂事件觸發自殺
typedef struct _BgApp {
AEEApplet a;
boolean m_bGoBg; // 後台模式旗標
} BgApp;
boolean BgApp_HandleEvent(BgApp* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch (eCode) {
case EVT_APP_START:
if (pMe->m_bGoBg) {
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE); // 直接進後台
return TRUE;
}
break;
case EVT_APP_STOP:
if (pMe->m_bGoBg) {
*((boolean*)dwParam) = FALSE; // 維持後台運行
return TRUE;
}
break;
case EVT_USER: // 自訂切換事件
if (pMe->m_bGoBg) {
pMe->m_bGoBg = FALSE;
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_BGAPP); // 切回前台
} else {
pMe->m_bGoBg = TRUE;
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE); // 切去後台
}
return TRUE;
}
return FALSE;
}
ISHELL_StartApplet 切回前台需 **BREW 2.0 以上** 平台支援。開發時應在 `.mif` 檔或 `AEECAR` 資源中聲明後台執行權限。完整範例代碼展示前後台切換、事件收發、資源管理最佳實務。