赞
踩
写在前面,经过前面service和feature的一系列讲解,我们来到最后一个环节——通过samgr初始化所有注册的服务
同样先贴上系列文章的链接,方便读者查找相关内容
SA框架下的基于Publish函数的广播机制
Samgr_lite——如何初始化服务?(以广播服务为例)(知识准备)
Samgr_lite——如何初始化服务?(以广播服务为例)(服务的注册)
Samgr_lite——如何初始化服务?(feature的注册)
开始终章!
在注册完系统服务和APP服务后,我们通过SAMGR_Bootstrap函数进行smagr的启动,将所有未初始化的服务进行初始化,使得整个系统进入DYNAMIC平稳运行的状态,那么这个函数实现了什么了,我们将其拆分为几个函数模块来看
首先我们宏观把握这个函数做了哪些事,后面再深入具体函数来看它是如何实现这个功能的
首先贴上代码注释
函数流程:
1.得到前面创建好的g_samgrImpl并对其进行mutex的检查
2. 创建一个临时的Vector用于保存后面检查出的未初始化的服务
3. 系统对应的BootStatus进入下一个状态
4. 获取互斥锁,开始对共享数据的修改和访问
5. 遍历samgr->services中的每个服务
6. 找到其中所有没有完成初始化的服务将其serviceImpl指针添加到上面的临时Vector中
7. 互斥锁的释放
8. 调用InitializeAllServices将Vector传入,初始化所有服务
9. 调用VECTOR_Clear将临时Vector释放
10. 调用InitCompleted检查是否全部初始化完成
11. 调用HILOG_INFO返回系统状态可以往下一步
注意:函数InitializeAllServices和InitCompleted所做的工作还有很多,包括taskPool的创建,消息处理相关,后面会深入函数进行分析
同样通过图示的方式将流程更加清晰地展现
限于篇幅原因,在下一篇文章中我们具体讲解函数InitializeAllServices和InitCompleted是如何具体初始化服务的
实际工程中的启动过程
首先我们可以注意到源码在service和feature注册init函数下面有这么一行:
可以看到这么两行:SYS_SERVICE_INTI和SYS_FEATURE_INIT
其实这才是实际应用中服务和feature注册初始化的启动函数
一个完整的服务的创建和运行需要进行三步走:
经过以上三步一个服务就真正创建完毕了
而一个完整的系统的创建和运行也是三步走:
经过以上三步整个系统服务的框架搭建完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。