MTK平台屏幕切换机制探索--group机制(11A版本)

本文深入探讨了MTK平台上的屏幕创建和管理机制,重点关注group节点和screen节点的创建、移动、激活及删除流程。通过代码追踪,揭示了屏幕节点如何在group节点中管理和切换,以及屏幕历史机制的工作原理。文章分析了开机流程、屏幕变换示例,并阐述了历史栈在屏幕回退中的关键作用。
摘要由CSDN通过智能技术生成

    熟悉了几个模块的代码流程以后,发现屏幕创建并没有想像中的简单,每个程序似乎都要在创建自己的屏幕之前先创建一个群,随后又进入这个群后,这才开始自己屏幕的创建,为什么要这么多此一举呢,为了研究屏幕的运作流程?我用MODIS追踪了屏幕的创建过程。

    首先,介绍下两个根节点,一个是屏幕根节点ROOT,所有的有效屏幕都是它的子孙节点,还一个是scenario_dangle,用来暂存刚创建或马上要销毁的屏幕节点。

    然后屏幕节点分为group节点和screen节点。group节点用来管理它旗下的screen节点,它本身并不产生实际意义上的屏幕,screen节点可以理解为我们所见到的屏幕。其中ROOT下面的叶子节点必须得是screen节点。如图1所示,其中,ROOT节点下面的8101节点是开机最早创建的一个group节点,它旗下有四个screen节点,其中8105节点就是选择sim卡的界面,而8108则是选择sim卡进入待机界面前的动画绘制界面,8102节点比较奇怪,它本身好像没什么效果,不知道是不是为了保证叶子节点是screen节点才创建的。


    group节点和screen节点的创建过程也不太一样,我简要概括一下两者的创建和销毁流程:

    

1.group节点:

典型的函数: mmi_frm_group_create             mmi_frm_group_enter               mmi_frm_group_close

(1) 创建节点:

    a. 检查scenario_dangle中是否存在此id

    b. 检查parent节点中是否存在此id

    c. 若没有,则创建节点(分配内存)并赋予parent的id(但parent中未加入此节点)

    d.  add_node(scenario_dangle, new_node): 将节点插到scenario_dangle的tail中,以我跟踪的情况,每次都是在图1中1327号节点的右边

(2) 移动节点

    a. 从scenario_dangle中获取此id

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值