MTK HISTORY 小结 5

到这里其实主要history 机制主要得功能都基本ok了,其他的好多接口函数都是换汤不换药,主要就是删除history stack 里面的记录,怎么回调需要被删除的screen 的call back,具体就不说了。

GoBacknHistory 返回到前n个screen id,这个函数有时候还是比较有用,比如当写一个公用模块,处理完毕后,直接返回到调用的地方,这样就不用在意到底是哪个模块调用的,要回到哪里。当然用其他方法来实现,比如保存调用该模块前的screen id等等,但是没有这个函数来的方便,轻巧。

GetCurrScrnId 获得当前history stack 顶部的screen id。注意和 GetActiveScreenId 函数区分, 这个函数是当前获得screen id,获得的screen id 不是history stack。从MTK 的命名上,容易让人混淆。

IsScreenPresent 判断一个screen id 是否存在历史记录里。DeleteScreenIfPresent 如果存在那么删除

操作history的函数还是挺多的,用起来很灵活,但是大部分不常用,如果要做一个比较好的应用,那么基本上也就是app 切换的时候,会用到这些,app 内部的ui 树或者菜单树的跳转,应该不会用这个。

对了还有一个函数要注意:SetDelScrnIDCallbackHandler 这个函数是设置一个回调函数,当这个screen id 被删除的时候,这个回调函数会被调用。当一个应用退出时,需要释放资源的话,最好设置这个函数,不然容易资源泄露,比如在 app 运行时,来了一个短信,然后选择了进入了短信查看,这个时候忽然一键退出,退出到idle,这样就需要在被删除时释放资源。当然也可以在退出函数里释放资源,但是这样做,有可能需要做比较多的状态保存,来回恢复,比较花费时间。比如阅读电子数时,来个闹铃,这个时候,如果在退出应用里做释放资源,那么就需要做很多状态保存。而闹铃很有可能就是简单的关闭,又回到电子书,这个时候,又要恢复状态,比较费劲。这个时候,如果在退出函数里,不做什么,回来时只要刷新下屏幕就一切ok了,好吧,具体的可能还要复杂些。反正我觉得这是一个不错的选择。(也不知道打了一堆字,有没有说清楚)

对于history 机制,还想说明的是一个变量 IsBackHistory,这个变量在前面几篇里也一直提到,可能说得不是很清楚。这个变量的作用其实是表明是否是历史记录返回的。这样在执行 EntryNewScreen 时判断是否要保存历史记录了。

比如 从A->B,这是正常进入,B会调用 EntryNewScreen,把A放入历史记录(这时 IsBackHistory 为false)。然后再B->C,同样B放入历史记录。这个时候从C->B。会弹出B,并且调用B的 EntryNewScreen,(这个时候IsBackHistory 为 true)虽然B从A进入还是从C回退都调用了 EntryNewScreen 但是从C回退时 只会执行C退出函数,而不会产生C的历史记录。

不知道说明白没,这样说吧,EntryNewScreen 会在两种情况下被调用,1,主动进入,产生前一应用的history。2,回退回来,但是不产生回退前应用的history。IsBackHistory  就是判断 EntryNewScreen 是否要产生history。

转自:http://blog.csdn.net/yanwuxufeng/archive/2010/08/30/5851642.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值