Android学习笔记(九):Service总结

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()中执行。

学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值