展讯6800平台MMK问题(三)
时间:10-02
整理:3721RD
点击:
最近做展讯6800,发现MMK存在几个问题,邮件问展讯同事,展讯答复说没问题。但我还是觉得有问题,所以发到论坛来,请各位大侠帮忙分析。
问题三:
文件:mmk_window.c
函数:MMK_GetFocusWinId()
问题:当窗口马上就要关闭时,不应将其再作为焦点窗口
PUBLIC MMI_WIN_ID_T MMK_GetFocusWinId(void)
{
uint32 win_id = 0;
......
if (PNULL != win_node_ptr)
{
win_id = win_node_ptr->win_id;
}
return (win_id);
}
应该修改为
PUBLIC MMI_WIN_ID_T MMK_GetFocusWinId(void)
{
uint32 win_id = 0;
......
if (PNULL != win_node_ptr && !win_node_ptr->win_ptr->is_will_close[/COLOR])
{
win_id = win_node_ptr->win_id;
}
return (win_id);
}
分析:如果在某窗口的MSG_CLOSE_WINDOW消息中,通过层层调用,最后要刷新当前焦点窗口,而当前的焦点窗口就是正要关闭的这个窗口,它执行MSG_CLOSE_WINDOW消息时已将资源释放,现在再执行MSG_FULL_PAINT消息就必然出问题。所以,将要关闭的窗口不能再是焦点窗口,需要加上win_node_ptr->win_ptr->is_will_close来判断。
实例:锁屏方式为多点滑动(即锁屏界面有四个应用的图标,将其中一个拖到下方的圆形区域即解锁并进入相应的应用)。短信列表界面,有未读短信,查看未读短信,查看界面锁屏,此时拖动锁屏窗口上的短信图标,执行解锁进并入短信应用。是这样进入短信应用的:在锁屏窗口的MSG_CLOSE_WINDOW消息中,先MMK_CloseMiddleWin()关掉短信相关的窗口,再进入短信应用窗口。在关短信查看窗口时,会更新状态栏(GUIWIN_UpdateStb),该函数是更新当前焦点窗口的状态栏,状态栏又会给焦点窗口Send一个FULL PAINT消息。而当前焦点窗口还是锁屏窗口,执行FULLPAINT消息时,资源已经释放了,从而引起死机等问题。
问题三:
文件:mmk_window.c
函数:MMK_GetFocusWinId()
问题:当窗口马上就要关闭时,不应将其再作为焦点窗口
PUBLIC MMI_WIN_ID_T MMK_GetFocusWinId(void)
{
uint32 win_id = 0;
......
if (PNULL != win_node_ptr)
{
win_id = win_node_ptr->win_id;
}
return (win_id);
}
应该修改为
PUBLIC MMI_WIN_ID_T MMK_GetFocusWinId(void)
{
uint32 win_id = 0;
......
if (PNULL != win_node_ptr && !win_node_ptr->win_ptr->is_will_close[/COLOR])
{
win_id = win_node_ptr->win_id;
}
return (win_id);
}
分析:如果在某窗口的MSG_CLOSE_WINDOW消息中,通过层层调用,最后要刷新当前焦点窗口,而当前的焦点窗口就是正要关闭的这个窗口,它执行MSG_CLOSE_WINDOW消息时已将资源释放,现在再执行MSG_FULL_PAINT消息就必然出问题。所以,将要关闭的窗口不能再是焦点窗口,需要加上win_node_ptr->win_ptr->is_will_close来判断。
实例:锁屏方式为多点滑动(即锁屏界面有四个应用的图标,将其中一个拖到下方的圆形区域即解锁并进入相应的应用)。短信列表界面,有未读短信,查看未读短信,查看界面锁屏,此时拖动锁屏窗口上的短信图标,执行解锁进并入短信应用。是这样进入短信应用的:在锁屏窗口的MSG_CLOSE_WINDOW消息中,先MMK_CloseMiddleWin()关掉短信相关的窗口,再进入短信应用窗口。在关短信查看窗口时,会更新状态栏(GUIWIN_UpdateStb),该函数是更新当前焦点窗口的状态栏,状态栏又会给焦点窗口Send一个FULL PAINT消息。而当前焦点窗口还是锁屏窗口,执行FULLPAINT消息时,资源已经释放了,从而引起死机等问题。
不同专业 看不懂
理解得还不深刻,不能帮小编。
不用完全相信展讯,用事实说话!
mtk也经常搞错。
它执行MSG_CLOSE_WINDOW消息时已将资源释放?
看看窗口节点的析构函数:MMK_WindowTreeNodeDestruct中发送CLOSE消息、窗口资源释放及窗口节点DESTORY顺序。
学习了。但是刚接触平台。不太熟悉