Android体系架构中,总的来说有两种服务,如下所示:
(2)SDK Service(也称为应用层服务):位于App层,继承service类实现,分为:本地服务和远程服务。
2 SDK Service
应用层Service有两种类型:
(1)本地服务(Local Service):只能进程本身使用;
(2)远程服务(Remote Service):通过RPC让多个应用程序复用。
类别 | 区别 | 优点 | 缺点 | 应用 |
本地服务 | 该服务依附在主进程上 | 节约了资源,不需要IPC。 | 主进程被Kill后,服务便会终止。 | 音乐播放服务 |
远程服务 | 该服务是独立的进程 | 有利于为多个进程提供服务,具有较高的灵活性。 | 占用一定资源,并且使用AIDL进行IPC。 | 一些提供系统服务的Service,这种Service是常驻的。 |
2.1 Local Service
(1)通过调用Context.startServece()启动,调用Context.stoptService()结束,流程如下:
context.startService() -> onCreate() -> onStartCommand() -> Service running -> context.stopService() -> onDestroy() -> Service stop
(2)通过调用 Context.bindService()启动,调用 Context.unbindService()结束,还可以通过ServiceConnection访问Service。其流程如下:
context.bindService() -> onCreate() -> onBind() -> Service running -> onUnbind() -> onDestroy() -> Service stop
2.2 Remote Service
AIDL(Android Interface Definition Language)用于跨进程地实现多个应用程序共享同一个Service的功能。
3 系统服务
native service和Java service的启动者是不一样的,但都是由service manager统一管理。
3.1 Native系统服务
Navite服务是完全在C++空间完成的服务,主要指系统初始化时,通过Init.rc脚本启动的服务,例如Service Manager,Media service等,这些服务的PPID都是1。
3.2 Java系统服务
Java服务是指在JVM空间完成的服务,虽然也要使用Native层的框架,但是服务主体存在于Java Framework。
Java服务是初始化第二阶段(Init2)时建立的服务,由System Server负责启动Java framework层的所有Java系统服务,例如:Activity Manager Service,Package Manager Service,并交给Service Manager统一管理。需要指出的是:这些服务都只是system_server的一个子线程。