Brew后台应用开发-VC编程

 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函数来激活应用本身。
  由前所述可知,要终止一个后台应用将会比较困难,因为他们不能直接接受任何按键事件,因而,要结束一个后台应用就必须使用两种思路:后台应用成功执行完一个计划任务后终止自己或者通过其他独立的应用发送事件结束该后台应用。具体使用方法有如下三种:
其他应用通过ISHELL_SendEvent或ISHELL_PostEvent函数来发送事件(eCode 的值 大于evt_user)来通知后台应用结束;
后台应用在执行完制定任务后,通过ISHELL_CloseApplet函数来终止后台应用。根据api 的帮助说明,激活应用调用ISHELL_CloseApplet(pIShell, TRUE)该参数的函数后,将会关闭所有正在执行的程序并且回到待机界面。然而,当由激活应用调用时,这个操作并不能影响到应用程序栈外面的程序;
应用通过调用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 backgroundreturn 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 backgroundISHELL_CloseApplet(pMe->a.m_pIShell, FALSE); }return TRUE;} 
  应用程序可以通过evt_user 事件,可以将应用设置为后台应用或者激活应用;这些事件可以由其他应用通过ISHELL_SendEvent() 或者 ISHELL_PostEvent()函数来发送。在这个执行处理中,evt_user事件只是将应用本身在后台和前台之间作切换作用。更复杂的行为处理可以通过检测dwParam参数的值进行处理,这个值是由应用程序分发时间传递来的。如果应用程序直接由brew应用管理器启动,m_bGoBg的初始化值将决定是否在后台运行。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值