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的生命周期
图1 Service的生命周期
Service生命周期回调方法
onStartCommand()
当其他的组件,比如Activity,调用startService()方法启动Service的时候,就会调用这个方法。一旦这个方法执行了,service开始了,并且在后台运行。如果你实现了这个方法,当所有的工作完成之后,你应当调用stopSelf()方法或者是stopService()方法来结束这个Service。(如果你只是想绑定这个Service,那就不要实现这个方法)
onBind()
当其他的组件使用bindService()绑定Service的时候,这个方法会被调用。如果你实现了这个方法,你必须提供一个接口供客户端和这个Service通信,这时会返回一个IBinder对象。实际在编程的时候,你必须要实现这个方法,但是如果你不想要其他的组件绑定到这个Service上,你可以返回一一个空值。
onCreate()
当Service第一次被创建时,这个方法会被调用,如果这个Service已经在运行了,就不会调用这个函数。
onDestroy()
当Service不再运行,并且被销毁,就会调用这个方法。在这个方法中应当清理Service所占用的所有系统资源,比如线程,注册的监听器,接收器等。这个方法是Services生命周期中最后被调用的方法。
- Service的生命周期(一)
- 四大组件---Service的生命周期(一)
- Android--Service生命周期(一)
- Android的服务(Service)(一)生命周期
- Android的服务(Service)(一)生命周期
- Android的服务(Service)(一)生命周期
- Service简介与生命周期讲解(一)
- Service的创建(生命周期)
- 一分钟掌握Service生命周期
- Activity和Service的生命周期-----Activity学习笔记(一)
- Activity和Service的生命周期(图)
- Activity和Service的生命周期(图)
- Activity和Service的生命周期(图)
- Activity和Service的生命周期(图)
- Service 的生命周期
- service的生命周期
- Service的生命周期
- Service生命周期的学习
- 智能听音公司Soundhawk获得550万美元融资,通过降噪算法让用户听到真正想听的声音
- 35.app后端搜索入门
- javax.swing.Timer 使用
- 黑马程序员——Java基础---线程的另一个总结(7)--condition,await
- 出走二杭州篇
- Service的生命周期(一)
- 【Leetcode】Compare version numbers
- 十个JavaScript中易犯的小错误,你中了几枪?
- 百度怎样监控其他搜索引擎或途径的来源流量
- 胡振亮:原来这就是很多网站百度权重做不上去的原因
- android 获取数据-需要注意的地方(系统优化)
- php扩展开发笔记(10)自定义 libpng 库中的 IO 函数,将图片写入内存
- python安装mysql驱动遇到的问题
- 怎么理解web标准