Android四大核心组件之一-----Service(服务)的基本知识

来源:互联网 发布:cf内部刷枪软件 编辑:程序博客网 时间:2024/05/01 23:11

Android四大核心组件之一—–Service(服务)的基本知识

定义:服务是一个应用程序组件,表示一个应用程序的愿望来执行一个较长的运行操作,而不与用户交互或提供其他应用程序使用的功能。

  • Android定义了两种类型的的Service: 本地服务和远程服务
    本地服务
    本地服务(Local Service):用于应用程序内部
    远程服务(Remote Sercie):用于android系统内部的应用程序之间
    Service的两种类型请点击这个链接

  • 启动服务的两种方式:
    启动服务的两种方式的参考实例链接
    -使用startService()方法和使用bindService()方法

  • 两者的区别
  • (1)使用startService()启动服务
    1. 用startService()方法启动的服务onCreate()和onStartCommand()回调方法依次被调用。
    2. 如果Service启动后多次重复调用startService()方法则onStartCommand()方法会被多次调用,也就是说,如果Service还没有运行,则Android会先调用Service的onCreate()方法,然后调用onStartCommand()。如果Service已经运行,则只会调用onStartCommand()。所以一个Service的onStartCommand()方法可能会重复调用多次,可以用Intent封装要传递的数据个onStartCommand()回调方法,然后在Service中进行获取。
    3. 使用stopService()方法的功能是停止服务,并且回调Service类中的onDestroy()方法。
    4. 用startService()方法启动的服务,当Activity退出时系统中的服务并不销毁,还在内存中执行,也就是说,用startService()方法启动的服务在内存中只有一个实例,并不随着Activity的退出而退出。
  • (2)使用bindService()启动服务并绑定服务
    1. 用bindService()方法启动的服务会自动依次调用onCreate()和onBind()方法。
    2. 当运行中的Service宿主对象Activity对象退出时,当前的Service也被销毁,并且自动调用onUnbind()方法和onDestroy()方法。
    3. 当在Service的回调方法onBind()返回null时,不调用ServiceConnection对象的onServiceConected()方法,当onBind方法返回一个IBinder对象时,则会自动调用ServiceConection对象中onServiceConected()方法。
    4. 传递给bindService()方法的Intent对象在IBinder onBind(Intent argo)方法中进行处理,而传递给unbindService()方法的Intent对象在onUnbind(Intent intent)方法中进行处理。

注意1:用startService()方法启动的服务,当宿主程序Activity对象退出时,Service并不销毁,也就是用用startService()方式启动的Service的生命周期并不和宿主Activity一致,如何退出Service,在Service中使用BroadcastReceiver广播接收者对象,然后通过Activity对象发出广播告诉service退出并销毁。
用startService()方法启动的Service只能通过Intent对象进行数据的传递,只能通过广播Brodcast间接地调用Service类中的方法

注意2:通过bindService方法启动是和startService()方法一样,都会调用onCreate()方法来创建Service,但它不会调用onStartCommand()方法而是调用onBind()返回客户端的一个IBinder接口,这个IBinder就是在Service的生命周期回调方法onBind()中的返回值,服务运行后,与前者不同的是,不是服务终止,而是使用Context.unbindService()方法之后,Service的生命周期回调onUnbind()会被调用,如果所有bind过Service的组件都调用unbindService()方法,那么Service会被停止,则会回调onDestroy()方法

Service服务的方法介绍

  • StartService()方法:启动服务,在内存中生成服务的实例对象。
  • stopService()方法:停止服务,用来销毁内存中的Service实例对象,如果内存中的Service对象曾经被bindService()方法关联绑定过,那么要想销毁内存中的Service,要先使用unbindService()反绑定服务。
  • bindService()方法:具有创建服务和绑定服务(与服务进行通信)的能力,使得与Service对象取得连接,进而进行数据上的通信,想要通信就得在Service的onBind()方法返回给客户端一个IBind接口实例,IBind接口实例,IBind接口允许客户端调用服务的方法,比如得到Service运行的状态或执行其他业务方法的操作。
  • unbindService方法:断开与Service的通信。
  • 使用bindService()方法启动服务的回调方法onRebind()的调用时机:是在客户端重新绑定Service时进行调用,需要注意的点是:有个限制就是反绑定Service时onUnbind()函数必须返回true.
  • ServiceConnection对象的onServiceDisconnected()方法调用时机:当Service服务被意外销毁时,例如内存的资源不足是这个方法才被自动调用。
  • onCreate()方法:当Service对象第一次被创建是,系统调用该方法。
  • onStartCommand(Intent intent,int flags,int startId)方法:当通过startService方法启动Service时,该方法被调用。
  • onDestroy()方法:当Service不在使用时,系统调用该方法。

  • 方法onStartCommand的返回值:方法onStartCommand的返回值为int类型,主要作用是当Service进程被意外kill掉是,Service服务下一步要做哪些行为,主要有3种值。

    1. START_STICKY: Service被意外终止时不调用onDestroy回调,并且终止后自动重启Service服务,只执行Service对象的onCreate()生命周期方法。
    2. START_NOT_STICKY:Service被意外终止时不调用onDestroy回调,并且不自动重启Service服务
    3. START_REDLIVER_INTENT:Service被意外终止时不调用onDestroy回调,并且终止后自动重启Service服务,还要执行Service对象的onCreate()和onStartCommand()生命周期方法,并且从Intent中能取到值。
0 0
原创粉丝点击