一、startService()生命周期
第一次执行onCreate()-->onStartCommand()->onDestroy()
第二次执行onStartCommand()-->onDestroy()
二、编写类继承Service或其子类
复写方法
先onCreate() 再onStartCommand() onBind() onDestroy()
三、BoundService生命周期
onCreate()-->onBind()-->onUnbind()-->onDestroy()
四、BoundService
BoundService允许其他的组件(比如Activities)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的童话.BoundService仅仅在服务于其他组件时存在,不能独自无限期的在后台运行.
五、创建BoundService
当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互。在Android中有三种方式定义方式:
1.扩展Binder类
2.使用Messenger
3.使用AIDL(Android Interface Definition Language)
六、通过扩展Binder类创建BondService步骤:
a.在Service类中,创建一个Binder实例,包含客户端能调用的公共方法,返回当前服务对象.
b.在onBind()方法中返回Binder实例
c.在客户端,从onServiceConnected()方法中获得Binder实例,
七、onStartCommand的三个返回值意义
START_STICKY:当服务进行在运行时被杀死,系统将会把它值为started状态,但是并不保存期传递的Intent对象
START_NOT_STICKY:当服务进行在运行时被杀死,并且没有新Intent对象传递过来,系统将会把它值为started状态,但是并不会再次创建进程,直到startService(Intent)方法被调用.
START_REDELIVER_INTENT:当服务进行在运行时被杀死,它将会间隔一段时间后重新被创建,并且最后一个传递的Intent对象将会再次传递过来.
八、IntentService使用
IntentService是Service类的子类,用来处理异步请求。客户端通过startservice(Intent)方法传递请求给IntentService,IntentService通过worker thread处理每个Intent对象,执行完所有工作之后自动停止Service。
a.写构造方法
b.复写onHandleIntent方法
九、IntentService执行如下操作
a.创建一个与应用程序主线程分开worker thread用来处理所有通过传过来的Intent请求.
b.创建一个worker queue,一次只传递一个intent到onHandleIntent()方法中,从而不用担心多线程带来的问题
c.当处理完所有请求后自动停止服务,而不需要我们自己调用stopSelf方法.
d.默认实现了onBind()方法,这个方法将会把我们的intent放到work queue中,然后在onHandleIntent()中执行. |