首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

BREW 後台應用程式開發完整指南:生命週期、事件模型與限制

     編輯:關於VC++

BREW 應用程式三種狀態

類型駐留位置使用者互動狀態切換
啟用應用堆疊頂端直接螢幕/按鍵互動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;
}

關鍵限制與注意事項

  • 無 UI 權限:後台應用不能直接繪圖、顯示對話框、播放鈴聲,除非先 ISHELL_StartApplet 切回前台
  • 資源競爭:多後台應用並存,需極度節制記憶體、CPU、電池
  • OEM 限制:部分手機廠商限制後台應用使用 Socket、多媒體等資源
  • 電池壽命:長期運行後台應用必須實作休眠/喚醒機制,避免持續喚醒 CPU
  • 終止困難:無法直接接收按鍵,需透過其他應用發送事件或排程自殺

適用場景

  • 來電/簡訊攔截與自動回覆
  • 定時同步資料 (郵件、行事曆、天氣)
  • GPS 軌跡記錄、運動追蹤
  • 系統級監控、安全軟體

版本需求

需 **BREW 2.0 以上** 平台支援。開發時應在 `.mif` 檔或 `AEECAR` 資源中聲明後台執行權限。完整範例代碼展示前後台切換、事件收發、資源管理最佳實務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved