Service

Service是标准应用组件之一,适用于长期运行,且无需用户交互的任务;或者提供可供其他应用使用的功能

类型

  1. Normal Service
  2. IntentService
    IntentService是一种处理通过Intent传递的异步请求的服务,Client通过startService(Intent)发起请求,如果对应服务已经启动,则该请求会放到请求队列中;如果对应服务没有启动,则先启动服务,再处理请求。请求是在onHandleIntent(Intent)函数中处理,该函数运行在一个由IntentService自动启动的worker thread中。请求队列中的所有请求都是在这个相同的thread中顺序处理。当所有请求都处理完后,IntentService会自行退出。

启动方式

  1. startService(Intent)
    Intent必须是显式的,包含具体的class name或者服务所在的包名。用这种方式启动的服务必须调用stopSelf或者stopService才能正常退出。
  2. bindService(Intent)
    Intent可以是显式的;也可以是隐式的,且匹配服务在manifest中声明的intent filter。用这种方式启动的服务,只有第一次绑定,服务启动时,会执行onBind回调,之后再次绑定服务,系统会直接返回第一次绑定时onBind返回的IBinder。绑定服务的Client销毁后系统会自动unBind,但推荐Client不需要服务时就立刻调用unBind。当所有的Client都unBind之后,服务会自行退出。

交互方式

  1. Intent
    适用于进程间和进程内通信,用于启动或绑定服务
  2. Binder
    进程内通信时,可以调用Service的接口;进程间通信时,可以利用IBinder.transactBinder.onTransact传递数据
  3. Messenger
    适用于进程间通信,但只能是Client单向向Service发送消息。
  4. AIDL
    使用于进程间通信,Client可以同步或异步(keyword in aidl: oneway)调用Service的接口。

你可能感兴趣的:(Service)