说说MTK的EntryNewScreen函数和一个Bug

原创 2011年01月09日 12:02:00

EntryNewScreen(XXX_SCREEN_ID, exit_fun, entry_fun, 0)后,XXX_SCREEN_ID成为Active  Screen Id, 但是XXX_SCREEN_ID的信息并不会加入到历史记录中,而是保存在一组全局变量中。只有当新的screen成为active screen时,XXX_SCREEN_ID才会被加入到history中。

我最近在做信息上下一条切换的功能,我的做法是先删除当前的Screen,然后再重新进入,发现DeleteScreenIfPresent一直没有删除当前屏幕,导致要按两次返回键才能退出信息查看界面。

那是不是DeleteScreenIfPresent有问题?DeleteScreenIfPresent会调用searched_history_node来判断Screen是否Present,searched_history_node的代码如下: 


OK,searched_history_node只是到historyData数组中去找scrnID。由于EntryNewScreen并没有将active screen的信息保存到historyData中,自然找不到,也就无法删除它。

你一定要删除XXX_SCREEN_ID屏幕,咋办?办法是让XXX_SCREEN_ID先加入到historyData中,也就让XXX_SCREEN_ID不再是active screen。在调用DeleteScreenIfPresent前先进入GLOBAL_SCR_DUMMY就好:
 
  
Bingo, 一个Bug解决了。一定有很多人遭遇过同样的问题,所以MTK搞了个GLOBAL_SCR_DUMMY。以前看到这句我还觉得奇怪。都怪付贵的教程不好,呵呵,开玩笑啦。还是侯捷说得好,“源码之前,了无秘密”。 

相关文章推荐

History管理机制与EntryNewScreen的关系

简单的分析一下History管理机制与EntryNewScreen的关系1.  与EntryNewScreen函数有关的全局变量:    currEntryFuncPtr,     currExitS...

android 1.6中LinearLayout getBaseline函数的一个bug

在项目中遇到一个bug,程序在android1.6上直接crash,但是在其他版本上均正常,错误日志如下: 04-07 17:02:53.512: E/AndroidRuntime(360): ...

实习点滴 - 跟一个蠢bug学习多线程调试、线程安全和可重入函数

昨天同事帮忙review代码的时候,发现我代码里使用了一个非线程安全的函数localtime,并建议我使用线程安全的localtime_r。于是我查了一下相关资料:time 与 gettimeofda...

MTK死机bug大全

死机bug 一、一个编译开关引发的血案:(此问题耗时本菜鸟1周排查出来)问题主要涉及到以下文件:(橙色为新增加部分)1,FLYFOT_FEATURES.h:#define _FT_SMS_DOUBLE...
  • look85
  • look85
  • 2011年03月08日 15:51
  • 1626

mtk平台卡槽切换引发的bug

近日遇到一个bug,开机的时候一个app使用ACTION_SIM_STATE_CHANGED广播监听,在intent数据中的IccCardConstants.INTENT_KEY_ICC_STATE为...

MTK通过TRACE的栈信息寻找BUG原因与解决方法

BUG的描述是这样的,在使用在线QQ时,如果来电话,就会重启。没有发现ASSERT信息,只有stack dump信息。起初听他们描述,感觉像是QQ或者通话的问题。抓了TRACE之后,发现是MED模块的...

MTK平台一个花屏重启问题的分析

在正常使用过程中,出现了异常重启,当时在聊QQ之后退出到桌面,然后就重启了。另外插着USB充电,根据FAQ [FAQ14812]如何快速对系统重启问题进行归类 提供以下信息,附件有完整的 ZZ_I...
  • wed110
  • wed110
  • 2016年08月08日 14:49
  • 2114
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:说说MTK的EntryNewScreen函数和一个Bug
举报原因:
原因补充:

(最多只允许输入30个字)