黑马程序员技术交流社区

标题: android Service总结 [打印本页]

作者: 冯盼    时间: 2012-12-4 12:36
标题: android Service总结
一、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()中执行.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2