当前位置: 代码迷 >> Brew >> 关于AVK_END关闭所有应用程序的有关问题。【大家来讨论下
  详细解决方案

关于AVK_END关闭所有应用程序的有关问题。【大家来讨论下

热度:5760   发布时间:2013-02-26 00:00:00.0
关于AVK_END关闭所有应用程序的问题。【大家来讨论下
在brew开发过程中,大家可能会发现,AVK_END(就是电源键)被按下时,BREW立即给活动的应用程序发送EVT_APP_STOP消息,关闭这些应用程序。这样关闭后,是不是还有一个应用程序不被关闭啊?因为如果全部都关闭了,那回到哪去呢?所以我觉得应该有一个主应用程序没有被关闭,如果真存在这样的一个app,大家知道是哪个吗?他的ID是多少?能把我的自己的一个应用程序设成这个主应用程序(暂且不考虑能否正常运行)。谢谢

------解决方案--------------------------------------------------------
AVK_END出消息后,确实会发出EVT_APP_STOP命令,但是不是所有的应用都关闭的,有几个后台应用是不会被关闭的。在OEM层的某个函数中有处理,当按AVK_END的时候,会去启动那个待机应用。那个待机应用的classid值不同厂商是不一样的。
------解决方案--------------------------------------------------------
TRUE BREW 手机也叫pure brew 手机,就是说,这个手机的所有应有都是通过brew写成的,例如待机页面,地址本,短信,dialer等等
------解决方案--------------------------------------------------------
一般情况下,BREW在收到AVK_END后,会触发CloseAllApplet动作。
如果当前激活应用拥有PHONE_FLAG,BREW会把AVK_END键发给当前激活应用同时不触发CloseAllApplet动作。

CloseAllApplet确实会导致所有应用关闭,后台应用不算。随后,BREW发现没有当前激活应用,会发出一个
WakeUp动作,将OEM预设的某个应用启动。通常这个应用是Core。效果上也就是回到IDLE。
------解决方案--------------------------------------------------------
一般情况下,BREW在收到AVK_END后,会触发CloseAllApplet动作。 
CloseAllApplet确实会导致所有应用关闭,后台应用不算。随后,BREW发现没有当前激活应用,会发出一个 
WakeUp动作,将OEM预设的某个应用启动。通常这个应用是Core。效果上也就是回到IDLE。

【如果当前激活应用拥有PHONE_FLAG,BREW会把AVK_END键发给当前激活应用同时不触发CloseAllApplet动作。】 
上面这句话是错的,不管有没有PHONE_FLAG,都会被关闭,并且受到EVT_APP_STOP的消息,无法先收到AVK_END键消息


1、CloseAllApplet确实会导致所有应用关闭:这包括你说的那个预设的应用(core)!
2、再开机时,也是启动这个OEM预设的应用(通常这个应用是core)。BREW发现没有当前激活应用,会发出一个WakeUp动作,将OEM预设的某个应用启动。这时不会重新初始化,只启动core显示待机(这算刚开机状态吗?楼主自己想) 
3、再启动core时,本来就是马上回到IDLE,没做开机初始化的许多事情。 


从log看到,brewappmgr和mainapp先后收到EVT_APP_STOP事件,就死机了。这说明这两者在处理STOP事件时,出了问题。
另外,在brewappmgr处于RESUME状态下来电话,当然会先给brewappmgr发送消息,再给mainapp发送EVT_APP_RESUME事件,不可能直接执行mainapp工程中的代码显示出来电界面,如果直接执行的话,肯定要乱掉的! 

------解决方案--------------------------------------------------------
一般情况下,的确如楼上几位所说的,BREW在收到AVK_END后,会触发CloseAllApplet动作,并关闭所有applet。
然后BREW发出WakeUp动作,将一个特殊的applet启动。这个应用是由一个特殊的config项(CFGI_AUTOSTART)指定的。

我认为,BREW平台在初始化时,也就是在AEE_Init()中,会get这个配置项,并进而启动这个No.1应用。
而这个应用有时是core applet,有时是个启动泵applet(主要用于启动其他applet,包括core),不同的手机会
有所不同。

当激活的应用拥有PHONE_FLAG时,它可以截取AVK_END。如果它在处理AVK_END时return TRUE,那么BREW就不会触发
CloseAllApplet了,至少我目前遇到的情况是这样,有的手机的按键比较少,在某些界面上只好截AVK_END事件,并回退
上一层界面,此时我们是不希望BREW关闭所有应用的。
  相关解决方案