在MTK的程序开发中,必然会遇到history机制的问题。整体来讲,就是屏幕或应用界面的切换管理问题。在这个方面,MTK的设计是非常好的,在阅读前辈大牛们的总结后,结合自己项目开发中的一些认识,大致分析一下这一套机制。
为什么可以用这样的一个机制呢,不难想象,MTK只是单任务的系统,一个任务一旦开启(激活),那么另一个任务就要退出或到后台运行。这样就保证了任务之间的屏幕切换是单线串联的。想想,如果是多任务的系统,可能有多个任务在同时运行,不停在不同任务之间切换
1、EntryNewScreen
对于屏幕有两个非常基本的操作,一个进屏函数(Entry),一个及时退屏函数(exit)
每个应用都会用得的一个函数 EntryNewScreen 就是调用mmi_frm_entry_new_screen
mmi_frm_entry_new_screen
{
……
/*主要执行函数 ExecuteCurrExitHandler,保存历史记录和回调退出函数*/
ExecuteCurrExitHandler();
……
/*将新应用作为当前的应用*/
if ((new_exit_handler != NULL) || (new_entry_handler != NULL))
{
mmi_frm_set_generic_exit_handler(new_scrn_id, new_exit_handler, new_entry_handler);
}
……
}
注意:只有当在调用mmi_frm_set_generic_exit_handler后,全局变量currExitScrnID、 curr_exit_handler、curr_entry_handle才表示当前应用。
void ExecuteCurrExitHandler_Ext(void)
{
……
/* 生成历史记录并保存 */