四.CoreApp的深入分析
目前参考代码里面的CoreApp所完成的工作比较多且杂,主要说来有如下几件事。
a)系统组件初始化;
b)开机Logo的显示;
c)Sim卡检测和Pin码校验;
d)系统状态信息更新;
i.电池状态;
ii.网络信号;
iii.网络模式;
e)IAnnunciator的维护与更新;
f)通话处理,打电话的输入框;
g)主菜单处理;
h)手机各种设置功能的处理;
i)关机键的处理;
目前CoreApp里面的代码,完成了太多的事,其实完全可以剥离成不同的模块来完成,大致可以分成如下几个部分。
1、总控模块;(CoreApp)
总控模块,主要完成手机按下开机键之后的各种初始化工作,同时此模块也是整个手机的控制中心,由它来完成手机的一些全局性工作,主要有如下几项。
1.系统初始化、Sim卡检测和Pin码校验;
2.开机Logo或者开机动画的显示;
3.底层服务程序的启动;(WmsApp、DialApp等);
4.系统配置信息的统一管理;
由于写配置信息到NV上面是一件非常慢的工作,每次上层App改变配置之后都去操作NV,很影响速度。所以,可以在内存中开一个配置信息的Buffer,上层App操作的实际上是这个Buffer,然后由Core在空闲的时候再统一写到NV上去。
5.关机处理;
[注]
由于CoreApp是在Idle Applet的界面之下,所以,为了能够实现“一键回菜单”的功用,有可能需要修改ui_task里面的Key处理函数,将所有的Key消息转发给 Core,这样Core就可以得到所有的Key事件了。(现在的ui_task只把Key事件发送给了AEE,而AEE只会将Key事件发送给当前活动 Applet)。
2、Idle模块;
主要完成待机界面的画图工作,主要有两部分:
1.系统信息指示栏;
2.待机界面(位图、动画、时钟、日历等);
3.软键
[注]
Idle只负责界面工作,不负责具体的系统状态信息的获取工作,这个工作将由其它模块完成。
3、Polling
手机状态信息查询模块,主要是完成手机各种状态信息的更新与维护。主要有如下几种:
a.电池强度;
b.网络信号强度;
c.网络模式(C/G);
d.PLMN网络名;
e.短消息、通话状态、闹铃;(这个由专门的模块完成,不在Polling之列);
f.各种外设信息;(USB、耳机插入等);
g.其它各种杂项信息;
4、Menu模块
菜单模块主要分两部分,一部分是主菜单的实现,另一个子菜单的实现。一般来讲,手机上的菜单系统应该是由Menu模块去统一完成,而不是由每一个子程 序去手动完成。菜单模块一般只需要负责到主菜单、二级菜单和三级菜单就Ok了。三级菜单之后的界面,就由每一个App单独去维护了。
5、其它功能App模块;
每一个功能模块,由一个专门的App来完成,这样的话,模块的独立性强,便于单独开发。模块间通过App启动和消息传送的方式来发生关系和进行模块间通信。