MTK - 10A帮助文档(总结) 联系客服

发布时间 : 星期四 文章MTK - 10A帮助文档(总结)更新完毕开始阅读c34cff96daef5ef7ba0d3cc1

Groupshell.scenario_danActive_groupgleHead\\tailHead\\tailScreenActive_scrnNew_groupGroupshell.scenario_danActive_groupgle2个小弟了没小弟了….HeadTailScreenActive_scrnNextNew_groupGroupInactive_group这些操作会写入队列,靠读取队列执行相应动作HeadTailScreenInactive_scrn这里会申请内存来NextNew_group记录控件历史GroupHeadTailScreenNew_groupNextActive_group终于轮到我了。GroupHeadTailScreenNew_groupNextActive_group我也有小弟了ScreenActive_scrn

5

3.返回屏幕

1)mmi_frm_group_close_ex (MMI_ID group_id, U32 type)中会调用group_close,而该函数会先关闭该节点的孩子节点,也就是screen节点,而scrn_close()会scrn_inactive()screen节点后,在调用execute_node_deinit(base_node_struct *node, mmi_scenario_evt_struct* evt)把POST_EXECUTE_DEINIT的操作写进队列中,接着调用scenario_process_post_evt_ex读取队列中的操作执行execute_node_post_deinit来释放screen申请的内存。这么一来原有的screen就不在了,对于group来说也会做类似的操作,同样是先inactive,再exit,最后deinit都会把操作写进队列,这样一来就结束了显示着的界面。

2)现在就是要看怎么实现返回的了,其实简单来说就是激活了被释放节点的前一个节点,如果该节点是group会激活该group下的screen,如果是screen就直接激活screen,调用screen节点所记录下的entry函数,实现了返回的效果。注意,在被释放节点的父节点为shell.scenario_root时,在返回时会调用GobackHistory,来返回历史。这个是我们熟知的方法,也就不在这一一介绍了。 具体流程如下图所示:

6

GroupHeadTailGroupScreennextActvie_groupHead\\tailScreenActive_screenGroupshell.scenario_dangleHeadTailHead\\tailScreenScreennextGroupInctive_screenActvie_group一些删屏响应函数在这调用shell.scenario_Groupdangle小弟…HeadTailScreen先释放保存控件ScreennextGroupActvie_group申请的内存,再释放Screen申请的内存Groupshell.scenario_Active_groupdangle你敢不走么?Head\\TailHead\\tailScreen激活这个节点的操Group作已写进队列Inctvie_groupGroupshell.scenario_Active_groupdangle。。。Head\\TailScreenGroupActive_screen释放内存,这个过程会调用根据本节点保留的控该节点记录的进入函数,用件信息还原历史户可以按自己需求写该函数

7

4.删除屏幕

其实删屏在返回屏幕中已经介绍了他的具体流程,这里就简单介绍些常用的几个删屏函数吧:

1)mmi_frm_group_close (MMI_ID group_id):删除相应ID的group,删除group会连带删除该group下的所有子节点。

2)mmi_frm_scrn_close_active_id()顾名思义会删除激活状态下的screen 3)mmi_frm_scrn_close_ex (MMI_ID parent_id, MMI_ID scrn_id, scrn_close_type_enum flag)删除指定ID的screen。 4)mmi_frm_scrn_multiple_close (MMI_ID parent_id, MMI_ID start_scrn_id, U8 b_inc_start, U16 count, MMI_ID end_scrn_id, U8 b_inc_end)这个类似53平台上的DeleteHistoryInt(),用来删除多个屏幕。

注意:如果被删的节点的父节点,只有一个子节点(也就是被删的节点),那么同样会删除该节点的父节点。

5.插入节点

1)mmi_frm_group_insert (MMI_ID parent_id, MMI_ID base_id, mmi_frm_node_struct *new_node_info, mmi_scenario_node_flag flag)

2)mmi_frm_scrn_insert (MMI_ID parent_id, MMI_ID base_id, mmi_frm_node_struct *new_node_info, mmi_scenario_node_flag flag)

两者都会根据传入的flag参数确定加入的位置,加节点的流程与进屏加节点类似,只是位置不同,不再分析流程。

6.一些函数介绍

1.mmi_frm_get_active_scrn_id(MMI_ID *group_id, MMI_ID *scrn_id)获取激活的group和screen的ID

2.mmi_frm_group_get_active_id(void)

3.mmi_frm_scrn_get_active_id(void)和以前类似,对tab页也是获取主屏ID

4.mmi_frm_scrn_tab_get_active_id(void)这个函数是获取tab页主屏的ID 5.mmi_frm_scrn_tab_page_get_active_id(void)获取激活的page页ID(也就是子屏ID)

6.mmi_frm_scrn_get_active_gui_buf (void)这个函数封装了所有screen的历史获取,包括tab页。

7.mmi_frm_scrn_set_leave_proc (MMI_ID parent_id, MMI_ID scrn_id, mmi_proc_func proc)设置删屏响应函数

7.总结

由上可知10A的屏幕管理要比以前的复杂的多,上面所分析的也是一种常见的屏幕架构,也会有比较特殊的,会直接用以前的EntryNewScreen,也会有一个group下游很多screen子节点,可是万变不离其中,都是根据节点的增删,维护一个树,来实现屏幕的切换。

还有些tab页的进屏没有详细分析,不过也是类似节点的管理,不再一一介绍,可以根据代码了解过程。主要是进一个主屏,这个主屏链接着树,管理其顺序,然后主屏下有相应的page页,激活着的page页在这个主屏的尾部,在返回时只对主屏进行操作,不过在操作中会操作它的子节点。

8