说说MTK的EntryNewScreen函数和一个Bug

来源:互联网 发布:adobe 软件 ico图标 编辑:程序博客网 时间:2024/06/05 22:52

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

原创粉丝点击