Androd6.0 CameraService服务启动流程

以CameraService这个系统服务为例,在Android 6.0以前,CameraService启动是在frameworks\base\media\mediaserver\Main_MediaServer.cpp下有个main函数,可以用来注册媒体服务。没错就是在这里,CameraService完成了服务的注册。

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();
}

具体的启动过程可以参考http://blog.youkuaiyun.com/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();
}

二、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);
        }

三、其中方法startOtherServices(),通过SystemServiceManager,启动了CameraService服务。
这里写图片描述

SystemServer进程是由Zygote孵化出的系统重要进程,在init1阶段启动,所以CameraService放在这里启动也是可以保证进入系统后,相机服务可以正常使用。关于SystemServer的具体分析可见http://blog.youkuaiyun.com/innost/article/details/47253091

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值