我知道 Brew 应用程序有 3 种类型:活动、暂停和后台。将一个 BREW 应用程序启动为活动或挂起非常简单。我知道在 BREW2.0 及更高版本中,有一种新的应用程序类型可以让我们在后台创建一个应用程序。它不会停留在应用程序堆栈中并通过 active 或 resume 命令更改状态。无论收到什么用户命令系统,它都将始终留在后台。在我的一个小项目中,我需要像这样创建并启动一个后台应用程序。
不幸的是,我在高通或谷歌上找不到一个简单的例子。有遇到同样问题的程序员吗?
我知道 Brew 应用程序有 3 种类型:活动、暂停和后台。将一个 BREW 应用程序启动为活动或挂起非常简单。我知道在 BREW2.0 及更高版本中,有一种新的应用程序类型可以让我们在后台创建一个应用程序。它不会停留在应用程序堆栈中并通过 active 或 resume 命令更改状态。无论收到什么用户命令系统,它都将始终留在后台。在我的一个小项目中,我需要像这样创建并启动一个后台应用程序。
不幸的是,我在高通或谷歌上找不到一个简单的例子。有遇到同样问题的程序员吗?
是的你是对的。BREW2.0+ 支持后台应用。
当我们初始化一个后台应用程序时,就像其他正常的新应用程序一样,它可以直接通过brew应用程序界面启动。您也可以通过 ISHELL_StartApplet 函数启动它。
当您想将一个 brew 应用程序放在后台时,您需要在处理 EVT_APP_STOP 事件时这样做,并且必须将 dwParam 设置为 false。通过此处理 EVT_APP_STOP 后,应用程序将被置于后台。如果您想将其更改为普通应用程序,您需要调用 ishell_StartApplet 函数再次激活它自己。
示例代码:
typedef struct _bgApp
{
AEEApplet a;
boolean m_bGoBg;
} bgApp;
switch (eCode)
{
case EVT_APP_START:
if(pMe->m_bGoBg)
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE);
case EVT_APP_STOP:
if(pMe->m_bGoBg)
*((boolean*) dwParam) = FALSE;
return TRUE;
case EVT_USER:
if(pMe->m_bGoBg)
{
pMe->m_bGoBg = FALSE;
// make applet active
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_BGAPP); }
else
{
pMe->m_bGoBg = TRUE;
// trigger EVT_APP_STOP to send app to background
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE);
}
return TRUE;
}
后台应用程序存在限制。您不能更改屏幕或直接与用户交流。开发人员应注意后台应用程序使用的内存。这个非常重要。