Android 的核心服务

来源:互联网 发布:ubuntu怎么安装mysql 编辑:程序博客网 时间:2024/05/18 03:05

在Android上,上层APP的SDK-basedService与底层的核心服务有很大的区别:

1.应用层的应用服务,统称为SDK-basedService(App服务)

2.系统层核心服务,统称为CoreService(SystemService)

App服务是在开机完成后,用户加载并开启某个应用时,才会启动该App的服务,他会定义成一个Service的子类,当AMS(activityManagerService)启动一个App的时候,就会通过Socket请求Zygote来fork一个进程来给这个即将启动的App核心服务(数十个)在开机过程中启动,当开机完成时,核心服务已经全部启动完成.开机时加载Linuxkernel部分,进行Kernel-Space的初始化,加载硬件驱动程序,启动Linux系统,当系统linux启动后,先创建init进程,读取init.rc文档,来创建Runtime进程,Zygote进程(c与java两部分).Zygote创建VM,runtime创建ServiceManager.,之后再启动MediaServer,SurfaceFlinger;**最后Zygote创建SystemServer进程.,使大部分的系统服务都在此进程,包括NativeService(c++)和AndroidService(java),这个不等于APPService**

核心服务是系统层的前装型服务:1,一部分以c++实现,一部分以java类别实现;2.可透过ServiceManager来建立和绑定Bind核心服务;2.绑定后可透过IBinder接口去执行其函数

区分两种核心服务:NativeService和AndroidService

以java写的统称AndroidService(例如:AudioService,SensorService等);以c++写的统称为NativeService(例如:MediaPlayerService,和CameraService等);

核心服务的特性:

核心服务通常在特定的进程中进行必须提供IBinder接口,让app进行跨进程的bind和呼叫因为共享,所以必须确保多线程安全(Thread-safe)以C++类别或者java类别定义,诞生其对象,请ServiceManager将其该对象参考值加入到BinderDriver里,(app可请sm协助而远距绑定某核心服务,此时sm会传IBinder接口给app,app可透过IBinder::transact()函数来与核心服务互传信息)

常见的的AndroidService:

ActivityManager(活动管理器):提供所有的应用程序的生命周期,以及Activity之间的互动服务WindowManager(窗口管理器)提供有关屏幕窗口之间的管理服务ResourceManager(资源管理器)管理程序使用的各项资源,如字符串,图片布局等LocationManager(位置管理器) 提供位置服务(Location-basedService)TelephoneyManager(电话管理器)提供有关手机通话服务 其他

常见的NativeService:

ServiceManager (服务管理器)

     ServiceManager (服务管理器) 协助登陆和绑定系统服务,是Android的一个基本模块,在启动中就会被登陆到BinderKernel中,使用C/C++撰写NativeService模块时,可以透过defaultServiceManager()函数来取得ServiceManager接口的指针,例如:在CameraService.cpp程序里的instantiate()函数,如下:`
 void CameraService ::instantiate    defaultServiceManager()->addService(    String16("media.camera"),new CameraService())
他使用defaultServiceManager()函数来去的ServiceManager模块,然后呼叫IServiceManager接口的addService函数,讲自己的对象传给SM,请他登陆到BinderKernel中,成为一个可提供远程服务的模块.

Zygote服务

    Android最内层有个Zygote服务,他是java层的孵化器,Zygote就在幕后复制孵化(fork)出一个子进程来给这些java层的系统服务或者应用程序,所以Android的应用程序和上述的各项服务,都是由Zygote孵化出来的

CameraService(摄像服务)

其实作用于libcameraservice.so共享库中,与底层的Camera硬件和HAL驱动程序衔接,由Linux的videodev接口来取得视讯.
原创粉丝点击