1.概述
A Service is an application component that can perform long-running operations in the background and does not provide a user interface.
2.使用Service的方式
Started
startService():调用者和服务之间没有联系,即使调用者退出了,服务仍然进行 [onCreate()-->onStart()-->startService()-onDestory()]
Bound
bindService():调用者和服务绑在一起,调用者一旦退出服务也就终止[onCreate()-->onBind()-->onUnbind()-->onDestory()]
3.通过startService()使用Service的步骤
1)编写类继承Service或其子类
2)复写方法
onStartCommand() onBind() onCreate() onDestroy()
3)在manifest文件中声服务
<service android:name=".Service" />
4)启动服务
5)关闭服务
onStartCommand()的三个返回值常量:
START_STICKY:当服务进行在运行时被杀死,系统将会把它值为started状态,但是并不保存其传递的Intent对象
START_NOT_STICKY:当服务进行在运行时被杀死,并且没有新的Intent对象传递过来,统将会把它值为started状态,但是并不会再次创建进程,直到startService(Intent)方法 被调用。
START_REDELIVER_INTENT:当服务进行在运行时被杀死,它将会间隔一段时间后重新被创建,并且最后一个传递的Intent对象将会再次传递过来。
4.创建Bound Services
Bound service 允许其它的组件(比如Activities)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的通话。Bound service 仅仅在服务于其它组件时
存在,不能独自无限期的在后台运行。
当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互。在Android中有三种方式定义方式:
1.扩展Binder类
2.使用Messenger
3.使用AIDL (Android Interface Definition Language)
通过扩展Binder类创建创建Bound Services
步骤:
a.在Service类中,创建一个Binder实例
包含客户端能调用的公共方法
返回当前服务对象
b.在onBind()方法中返回Binder实例
c.在客户端,从onServiceConnected()方法中获得Binder实例
5.IntentService使用
IntentService是Service类的子类,用来处理异步请求。客户端通过startService(Intent)方法传递请求给IntentService,IntentService通过worker thread处理每个Intent对象,执
行完所有工作后自动停止Service。
写构造方法
复写onHandleIntent()方法
IntentService执行如下操作
1) 创建一个与应用程序主线程分开worker thread用来处理所有通过传递过来的Intent请求
2)创建一个work queue,一次只传递一个intent到onHandleIntent()方法中,从而不用担心多线程带来的问题
3)当处理完所有请求后自动停止服务,而不需要我们自己调用stopSelf()方法
4)默认实现了onBind()方法,返回值为null
5)默认实现了onStartCommand()方法,这个方法将会把我们的intent放到work queue中,然后在onHandleIntent()中执行。