1、D01_a认识Android基核於軟硬心整合服觀點务(a)By 高煥堂內容1. 区分核心服务与App服务2. 回忆App服务3. 区分两种核心服务:Android Service与Native Service4. 核心服务的特性5. 简介几个Android Service6. 简介几个Native Service7. 天一号的核心服务: ServiceManager8. 核心服务的共通API:IBinder接口9. BBinder基类实现IBinder接口1、区分核心服务基与於軟硬A整p合觀p點服务在Android平台,上层App的SDK-based Service与底层的核心服务有很大的区别。
2、, 只是许多人都将它们混在一起了。 于此,兹说明Android里有2种服务:1. 应用层的应用服务,通称为SDK-based Service(或称为App服务)。2. 系统层的核心服务,通称为Core Service(或称为System Service)。 至于App服务(即SDK-based Service)则属于App的一部份,是开机完成后,用户加载并开启某App时,才会启动该App里的服 务。这种App服务的特征是,它会定义成为Service的一个子类别。 如下图的myService子类别,它继承Android应用框架里的Service基类。(SDK-based 服務)JNI(核心服務)。
3、Binder DriverOpenCodeMediaPlayerServiceMediaPlayer.cppMediaPlayer.javamyService.javaService.java 在Android开机过程中,就会启动数十个核心服务。当开机完成时,全部核心服务也都启动完成了。 接着,才能启动App,并执行之。所以, 核心服务的启动时间早于App的启动时间。Linux Kernel + Drivers + HWLinux Kernel + Drivers + HWInit進程(讀取init.rc)Linux Kernel + Drivers + HWRuntimeInit進程(讀取i。
4、nit.rc)Linux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)ZygoteZygoteVMLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)ZygoteZygoteVMServiceManagerLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)ZygoteZygoteVMServiceManagerAndroid Service (Java)Native Service (C+)System ServerLinux Kernel + D。
5、rivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerAndroid Service (Java)Native Service (C+)System ServerAudioFlinger MediaPlayerService CameraServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerAndroid S。
6、ervice (Java)Native Service (C+)System ServerActivityManagerService WindowManagerServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerAndroid Service (Java)Native Service (C+)System ServerAMS(ActivityManagerService)启动一个App的时候,就会通过Socket请求Zygo。
7、te来fork一个进程给这个即将要启动的App。forkFork ServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem ServerforkLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem ServerLinux Kernel + Drivers。
8、 + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem Server 也就是说,当App服务启动时,核心服务早已经启动存在了。 因此,myService可以透过MediaPlayer和JNI来绑定(Bind)和调用核心服务MediaPlayerService。(SDK-based 服務)JNI(核心服務)Binder DriverOpenCodeMediaPlayerServiceMediaPlayer.cppMediaPlayer.javamyService.javaSe。
9、rvice.java 其中的myService就是一个App服务;而MediaPlayerService就是一个核心服务。到此,已经初步介绍了核心服务的特性, 让你能对分辨核心服务和App服务的微妙区别了。IBinderMediaPlayerServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem ServerIBinderMediaPlayerServiceLinux Kernel + Drivers + HWRun。
10、timeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem ServerVMmyService.javaService.javaIBinderMediaPlayerServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem ServerVMmyService.javaService.java2、回忆A基於p軟硬p整服合觀。
11、點务 核心服务是系统层的前装型服务 大多以C+类别实现,有些以Java类别实现。 可透过ServiceManager来建立和绑定(Bind)核心服务。 绑定后,可透过IBinder接口去执行其函数。 App服务是应用层的后装型服务 以Java层的Service的应用子类别实现。所有的App服务都是由ActivityManagerService核心服务所掌管。 在应用层(如Activity)可调用Android框架里Context类别的startService()和bindService()函数去绑定App服务。 绑定后,可透过IBinder接口去执行其函数。IBinderMediaPlayerServiceLinux Kernel + Drivers + HWRuntimeInit進程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerSystem Server Continued。