Androd6.0 CameraService服务启动流程
2018-01-25 19:34
597 查看
以CameraService这个系统服务为例,在Android 6.0以前,CameraService启动是在frameworks\base\media\mediaserver\Main_MediaServer.cpp下有个main函数,可以用来注册媒体服务。没错就是在这里,CameraService完成了服务的注册。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
具体的启动过程可以参考http://blog.csdn.net/dnfchan/article/details/7594590。
在最新的Android7.0的工程中,framework\av\media\mediaserver\Main_mediaserver.cpp下,CameraService的初始化代码不存在,所以CameraService的启动过程应该不在这里处理。找了很久也没有找到。
原来,native层的CameraService是通过Main_cameraserver.cpp启动的,这里面代码的逻辑与Main_mediaserver.cpp相同。
同时,6.0在java层也添加了服务启动代码。
不过在今天分析ActivityManager时,其核心模块ActivityManagerService是由SystemServer启动完成的,在分析SystmServer.java时,发现了蛛丝马迹。
一、 SystemServer的主函数入口处,调用了方法run()。
2
3
4
5
6
二、run()方法内部开启了系统的各个线程
2
3
4
5
6
7
8
9
10
11
12
13
三、其中方法startOtherServices(),通过SystemServiceManager,启动了CameraService服务。
SystemServer进程是由Zygote孵化出的系统重要进程,在init1阶段启动,所以CameraService放在这里启动也是可以保证进入系统后,相机服务可以正常使用。关于SystemServer的具体分析可见http://blog.csdn.net/innost/article/details/47253091。
int main(int argc, char** argv) { sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm = defaultServiceManager(); LOGI("ServiceManager: %p", sm.get()); waitBeforeAdding( String16("media.audio_flinger") ); AudioFlinger::instantiate(); waitBeforeAdding( String16("media.player") ); MediaPlayerService::instantiate(); waitBeforeAdding( String16("media.camera") ); CameraService::instantiate(); waitBeforeAdding( String16("media.audio_policy") ); AudioPolicyService::instantiate(); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
具体的启动过程可以参考http://blog.csdn.net/dnfchan/article/details/7594590。
在最新的Android7.0的工程中,framework\av\media\mediaserver\Main_mediaserver.cpp下,CameraService的初始化代码不存在,所以CameraService的启动过程应该不在这里处理。找了很久也没有找到。
原来,native层的CameraService是通过Main_cameraserver.cpp启动的,这里面代码的逻辑与Main_mediaserver.cpp相同。
同时,6.0在java层也添加了服务启动代码。
不过在今天分析ActivityManager时,其核心模块ActivityManagerService是由SystemServer启动完成的,在分析SystmServer.java时,发现了蛛丝马迹。
一、 SystemServer的主函数入口处,调用了方法run()。
/** * The main entry point from zygote. */ public static void main(String[] args) { new SystemServer().run(); }1
2
3
4
5
6
二、run()方法内部开启了系统的各个线程
// Start services. try { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices"); startBootstrapServices(); startCoreServices(); startOtherServices(); } catch (Throwable ex) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting system services", ex); throw ex; } finally { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); }1
2
3
4
5
6
7
8
9
10
11
12
13
三、其中方法startOtherServices(),通过SystemServiceManager,启动了CameraService服务。
SystemServer进程是由Zygote孵化出的系统重要进程,在init1阶段启动,所以CameraService放在这里启动也是可以保证进入系统后,相机服务可以正常使用。关于SystemServer的具体分析可见http://blog.csdn.net/innost/article/details/47253091。
相关文章推荐
- Androd6.0 CameraService服务启动流程
- centos启动流程及实现service管理apache服务
- Android 5.0 Camera系统源码分析(1):CameraService启动流程
- Android 5.0 Camera系统源码分析(1):CameraService启动流程
- Android 5.0 Camera系统源码分析(1):CameraService启动流程
- MySql Service 安装流程,包含解决服务无法启动 服务没有报告任何错误
- 请确保 ASP.NET State Service (ASP.NET 状态服务)已启动解决办法
- android 6.0 SystemUI源码分析(2)-SystemUI启动流程
- Android Service---创建一个被启动类型的服务
- 无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
- Android Service---启动服务
- NodeManager启动流程与服务
- nginx 加入contos服务启动 service
- Androd四大组件之Service服务
- Service启动流程
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHINE/SYSTEM/Curre
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- php-fpm服务启动脚本 service chkconfig
- php 环境配置Could not execute menu item (internal error) [Exception] Could not perform service action 服务尚未启动