欢迎来到天天文库
浏览记录
ID:22446113
大小:30.50 KB
页数:9页
时间:2018-10-29
《中止和恢复应用程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、中止和恢复应用程序下面几个例子说明可能会引起应用程序中止的情况:1.电池电量不足警告2.进入的电话呼叫3.进入的非BREW™SMS消息4.激活键盘锁定5.OEM需显示消息,如EnteringService(输入服务)6.需要运行BREW内核应用程序(例如,要将未完成确认发送到应用程序下载服务器时,就需要运行BREW内核应用程序-BREW内核应用程序将在发送确认消息的同时,启动并显示PreparingApplications(准备应用程序))要演示中止/恢复期间会发生的情况,我们可以看一看BREW应用程序运行时接收到进入呼叫的示例。BREW将EVT_APP_
2、SUSPEND事件发送到正在运行的应用程序。当且仅当该应用程序不处理EVT_APP_SUSPEND(即返回FALSE)时,BREW才将EVT_APP_STOP发送到该应用程序。呼叫结束时,BREW将EVT_APP_RESUME或EVT_APP_START发送到该应用程序,取决于以前是否处理过EVT_APP_SUSPEND。即EVT_APP_SUSPEND和EVT_APP_RESUME对称,而事件EVT_APP_STOP和EVT_APP_START对称。请注意:由于每个运营商对于在应用程序中止/恢复时应用程序应该做什么和不做什么有不同的指导原则,建议参考运营
3、商指导原则。下面是应用程序在中止和恢复时应该执行的操作的列表(如果应用程序希望在中止后恢复)。请注意此列表并不详尽,但可以用作应用程序中止/恢复时所需某些通用处理的检查清单。应用程序中止时应执行以下操作:1.将控件(IMenuCtl、ITextCtl、IDateCtl和ITimeCtl)设置为未激活。例如:IMENUCTL_SetActive(pMe->m_pIMenu,FALSE);2.重置IStatic控件。a.带文本内容的IStatic:ISTATIC_Reset()用于释放与标题和文本关联的内存。恢复时,IStatic的文本和标题必须重新分配。重置
4、带文本内容的IStatic控件的示例:if(pMe->m_pIStatic!=NULL)ISTATIC_Reset(pMe->m_pIStatic);b.带动画位图内容的IStatic:如果IStatic内容为动画位图(IImage),则必须执行以下两个步骤:i.重置IStatic:这会将IStatic与IImage分离,但不释放IImage的内存。if(pMe->m_pIStatic!=NULL)ISTATIC_Reset(pMe->m_pIStatic);ii.明确停止IImage。由于已停止且不释放IImage,所以恢复时不需要重新实例化。if(pM
5、e->m_pIImage!=NULL)IIMAGE_Stop(pMe->m_pIImage);2.如果涉及内存(如当前小程序被中止时会启动另一个小程序的情况),则建议释放IStatic和相关IImage(如果有)。释放IStatic和IImage将从内存中将它们完全删除,因此在恢复时要求重新实例化。3.释放IStatic控件的示例:4.if(pMe->m_pIStatic!=NULL){ISTATIC_Release(pMe->m_pIStatic);pMe->m_pIStatic=NULL;}5.停止IImage动画例如:IIMAGE_Stop(pMe-
6、>m_pIImage);1.取消计时器例如:if(ISHELL_GetTimerExpiration(pMe->m_pIShell,TimerCB,(void*)pMe)>0)ISHELL_CancelTimer(pMe->m_pIShell,TimerCB,(void*)pMe);2.释放套接字连接。如果未释放套接字连接,则数据呼叫不会被中止。相关的PPP通道会阻碍电话拨打/接收语音呼叫。这在当前网络中确实如此,但在新一代网中会有所改观。另外,请记住通过调用ISOCKET_Cancel()取消所有未完成的套接字操作。例如:if(pMe->m_piSock
7、){ISOCKET_Cancel(pMe->m_piSock,0,0);ISOCKET_Release(pMe->m_piSock);pMe->m_piSock=NULL;}设计成在后台运行、监听套接字的应用程序则属例外情况。3.取消回调函数,如计时器、套接字、DNS查找和网络状态回调函数。取消DNS查找回调函数的示例://检查是否可以取消回调。如果是NULL//则已经发生而不能取消。if(pMe->cbkLookup.pfnCancel!=NULL){CALLBACK_Cancel(&pMe->cbkLookup);}取消网络状态回调函数的示例:INET
8、MGR_OnEvent(piNet,(PFNNETMGREVENT
此文档下载收益归作者所有