关闭

说说MTK的EntryNewScreen函数和一个Bug

1847人阅读 评论(1) 收藏 举报

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。以前看到这句我还觉得奇怪。都怪付贵的教程不好,呵呵,开玩笑啦。还是侯捷说得好,“源码之前,了无秘密”。 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:132782次
    • 积分:2034
    • 等级:
    • 排名:第19640名
    • 原创:63篇
    • 转载:6篇
    • 译文:0篇
    • 评论:31条
    最新评论