Service(服务)是一个没有用户界面、在后台运行、执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到其他应用场景时,Service 将持续在后台运行。另外,一个组件能够绑定到一个Service与之交互(IPC机制),例如,一个 Service 可能会处理网络操作、播放音乐、操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行的。
Service 的分类
Service可以通过运行地点和运行类型两种方式来进行分类。按运行地点分类,可以分为本地服务和远程服务两类。
本地服务(Local)
优点:该服务依附在主进程上,而不是独立的进程,在一定程度上节约了资源,另外 Local 服务因为是在同一进程,因此不需要IPC,也不需要AIDL。相应bindService 会方便很多
缺点:主进程 被Kill 后,服务便会终止
应用:常见的应用如酷我音乐播放服务
远程服务(Remote)
优点:服务为独立的进程,对应进程名格式为所在包名加上所指定的android∶process字符串。由于是独立的进程,因此在 Activity 所在进程被Kill 的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务,具有较高的灵活性
缺点:该服务是独立的进程,会占用一定资源,并且使用AIDL进行IPC稍微麻烦一点。
应用:一些提供系统服务的Service,这种 Service 是常驻的
在实际的开发实践中,Remote Service 相对是很少见的,并且一般都是系统服务,所以本章讲解的重点是 Local Service。
按运行类型分类,Service也可以分为两类。
前台服务与后台服务