Service的生命周期(一)

来源:互联网 发布:大数据精准营销特点 编辑:程序博客网 时间:2024/04/30 00:12

参考Android官方开发文档API22


简介

  Service是Android的四大组件之一,它是用来进行后台操作的,它并不为用户提供界面,所有的操作都在后台完成,它的所有操作对用户都是不可见的。一旦其他的组件启动了一个Service,它会在后台一直运行,即便是用户切换到了其他的应用中。其他的组件也可以绑定Service进而启动一个Service,甚至可以用它来进行IPC(进程通信,inter process communication). Service可以进行的操作有很多,比如说网络通信,音乐播放,文件的I/O操作,以及和Content Provider进行交互。

  • 启动(start)

      当其他的组件(比如Activity)调用startService()方法时,就会启动Service。一旦启动Service之后,即便是启动它的组件被销毁了,对这个Service也没有影响,它仍然在后台运行。通常来说,一个Service执行单一的操作后,它应该自行结束自己的生命周期,但是不并不会向启动它的组件返回结果。

  • 绑定(bound)

      其它的组件调用bindService()可以绑定一个Service,绑定之后,可以与这个组件进行类似于客户端的操作,比如发送请求,返回结果,甚至还可以进行进程通信。只要有其他的组件绑定到Service上,这个Service就可以运行。一个Service可以被多个组件绑定,当所有绑定它的组件都解除绑定之后,这个Service就停止运行,进而被销毁。

  虽然有两种方法可以启动Service,但是这两种方法并不冲突,当使用onStart()方法启动Service之后,同样还可以再使用onBind()方法绑定,只不过生命周期的几个回调函数会调用的稍有不同。

注意: Service是运行于寄主进程的主线程中,也就是说,一个Service启动的时候,它不会创建一个新的线程,也不会新开一个进程,除非你自己开一个进程。所以当你使用Service进行一些耗费CPU的操作时,最好新开一个线程,以减少ANR错误。

Service的生命周期


Service的生命周期

图1 Service的生命周期

Service生命周期回调方法
  1. onStartCommand()

      当其他的组件,比如Activity,调用startService()方法启动Service的时候,就会调用这个方法。一旦这个方法执行了,service开始了,并且在后台运行。如果你实现了这个方法,当所有的工作完成之后,你应当调用stopSelf()方法或者是stopService()方法来结束这个Service。(如果你只是想绑定这个Service,那就不要实现这个方法)

  2. onBind()

      当其他的组件使用bindService()绑定Service的时候,这个方法会被调用。如果你实现了这个方法,你必须提供一个接口供客户端和这个Service通信,这时会返回一个IBinder对象。实际在编程的时候,你必须要实现这个方法,但是如果你不想要其他的组件绑定到这个Service上,你可以返回一一个空值。

  3. onCreate()

      当Service第一次被创建时,这个方法会被调用,如果这个Service已经在运行了,就不会调用这个函数。

  4. onDestroy()

      当Service不再运行,并且被销毁,就会调用这个方法。在这个方法中应当清理Service所占用的所有系统资源,比如线程,注册的监听器,接收器等。这个方法是Services生命周期中最后被调用的方法。

0 0
原创粉丝点击