您的位置:逆风者 VC++ 正文
原作者:火车采集器(http://www.locoy.com) 添加时间:2007-09-01 原文发表:2007-08-31 人气:12

本文章共2130字,分2页,当前第1页,快速翻页:
 

Brew 后台应用开发

翻译:牛阿牛

原文出处:Background Applications
逆风者

Overview 概述


  Brew应用程序可以分为3类:激活的,挂起的和后台的;激活或挂起的应用程序驻留在应用程序栈里,这个栈是brew用来管理正在执行的应用的。栈中最上面(top)的是激活的应用程序,只有它才能直接与用户通过屏幕更换或者用户事件来交互信息;挂起应用某种程度上位于当前激活应用的栈下面 。
  由于可能有多个应用处于挂起状态,开发者应该尽量保证挂起程序所占资源最小化。栈中的应用可以通过suspend 或resume 来挂起或激活应用。
  在brew2.0版本中,涉及到了后台应用的开发。后台应用并不驻留在应用程序栈中;也就是说,它不会依据挂起或激活事件而改变运行状态。相反,后台应用一旦被初始化运行后,总是一直在运行中,而不受用户直接交户指令影响。


Starting/Ending 启动和结束

  当开始初始化后台应用时,也像其他正常的brew应用一样;它可以直接由brew应用接口直接启动,也可以通过其他brew应用使用ISHELL_StartApplet函数来启动。
  要将一个brew应用放入后台运行,brew应用在处理EVT_APP_STOP 事件时,必须将dwParam 的值设为false;这样在EVT_APP_STOP事件处理后,brew应用将被放在后台运行;后台应用要变为brew正常使用,必须通过自我运行ishell_StartApplet函数来激活应用本身。
  由前所述可知,要终止一个后台应用将会比较困难,因为他们不能直接接受任何按键事件,因而,要结束一个后台应用就必须使用两种思路:后台应用成功执行完一个计划任务后终止自己或者通过其他独立的应用发送事件结束该后台应用。具体使用方法有如下三种:

  1. 其他应用通过ISHELL_SendEvent或ISHELL_PostEvent函数来发送事件(eCode 的值 大于evt_user)来通知后台应用结束;
  2. 后台应用在执行完制定任务后,通过ISHELL_CloseApplet函数来终止后台应用。根据api 的帮助说明,激活应用调用ISHELL_CloseApplet(pIShell, TRUE)该参数的函数后,将会关闭所有正在执行的程序并且回到待机界面。然而,当由激活应用调用时,这个操作并不能影响到应用程序栈外面的程序;
  3. 应用通过调用ISHELL_StartApplet函数来激活自身,从而可以正常接受用户事件;

Suspend/Resume 挂起和恢复

  由于后台应用驻留在应用程序栈的外面,因而他们不受挂起和恢复时间的影响。后台应用只有被激活才能处理挂起和恢复时间,它可以被自身或者其他程序发送的事件来激活。


Event Handling 事件处理

  当后台应用正在运行时,它不能接受按键事件。然而很多后台应用可以使用事件处理来和其他激活应用交互,这样可以曲线控制后台应用。在这种情况下,激活应用可以通过ISHELL_SendEvent()or ISHELL_PostEvent()方法来通知后台应用做出相应的反应。


Limitations 局限性

  后台应用最主要的限制是除非自身激活,否则无法修改屏幕信息以及和用户直接交流。除此之外,开发者应该注重后台应用的运行环境的资源的有限性。这对于后台极为重要,由于可能有多个后台在同时运行。并且,运行后台应用的设备将需求更多的电源支持,有可能导致不能进入可信任模式;
  因而,长期的后台应用,应该避免对设备电池寿命的有害影响。一些OEM厂商可能会限制后台运用的性能;例如:当运行后台运用时,它将不能使用socket或者不能播放铃音。


Examples 实例


Assume the following applet structure: //假设如下应用结构。



typedef struct _bgApp

{

	AEEApplet a;

	boolean m_bGoBg; // used to toggle whether to run in background mode,后台运用的标志状态。

} bgApp;



Model event handling for a background application: //后台运用的事件处理模型



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)

		*((boolean*) dwParam) = FALSE; // set dwParam to run in bg ,后台运行了

	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;

}       
 
本文章更多内容1 - 2 - 下一页>>
相关文章

浅谈PDFlib中文输出(二)如何在PDFlib中使
用 C 创建简单的 Win32 服务程序
DataGrid的客户端分页
真正的全动态报表:RDLC ReportViewer
COM 组件设计与应用(十六)——连接点(vc.
如何实现Office式样的扁平组合框
在EVC3.0中使用数据库
VC中调用EXECL模板生成报表
在Visual C 中定制AppWizard (一)
连接 COM 与 .NET 的桥梁(一)——预备知识
层叠式窗体控件指南
基于 SSL 的 ASP.NET Web 应用测试自动化
Windows SDK笔记(七):创建MDI窗口
KVIP考勤系统
一个生成公章图片的简易工具
检测:.NET中强大的检测选项让你有信心建立
谈谈软件项目管理的重要性

相关评论


本文章所属分类:首页 VC++
 

  热门关键字: