Android 基础之 Service

Service 的含义及作用

Service 是一个可以在后台执行长时间运行操作而不需要提供用户界面的应用组件,也就是说 Service 是为了去处理那些不需要和用户交互但又耗时的操作。但是如果 Service 只是为了执行那些耗时的操作的话,其实只用线程也可以达到同样的目的,之所以需要单独用 Service 来进行实现的原因在于 Service 相较之线程而言优先级比较高,并且 Service 通过绑定启动的时候是可控的,如果系统不是极端不够用,一般而言是不会杀死 Service,但是线程可能存在被系统回收的可能性,所以 Service 的可靠性要比线程高。 另外关于 Service,官网上还有如下的提示: > 服务在其托管进程的主线程中运行,它既不创建自己的线程,也不在单独的进程中运行(除非另行指定)。 这意味着,如果服务将执行任何 CPU 密集型工作或阻止性操作(例如 MP3 播放或联网),则应在服务内创建新线程来完成这项工作。通过使用单独的线程,可以降低发生“应用无响应”(ANR) 错误的风险,而应用的主线程仍可继续专注于运行用户与 Activity 之间的交互

Service 的生命周期

Service 的生命周期主要和服务的使用方式有关,使用服务主要分为启动和绑定两种方式,其生命周期如下图所示:

Service 的基本使用

  1. 创建服务 系统提供了一个 Service 抽象类,所以我们自己实现一个继承自 Service 的类,然后在 AndroidManifest.xml 注册即可。
  2. 运行服务 运行服务主要方法有两种,一种是调用 startService(),第二种则是 bindService()。实际上这两个方法可以同时调用。
  3. 服务中处理事件 startService 启动服务,事件的处理一般在服务的 onStartCommand 方法进行的,bindService 绑定服务之后,将会在 ServiceConnection 的 onServiceConnected 中返回一个 Binder 对象,利用返回的 Binder 对象可以调用相关的事件处理方法。
  4. 停止服务 服务的运行条件是服务被绑定或者被启动,所以想让服务不运行则需要破坏这两个条件,可以通过调用 stopService 和 unbindService 实现。