Service生命周期

news/2024/7/8 6:22:55

与Activity类似,Service也有自己的生命周期函数,在不同的时刻,系统会调用对应的Service生命周期函数,不过与Activity声明周期相比,Service的声明周期更加简单,我们通过官方给出的一张图片来体会一下:

这里我们总结一下:

1). 被启动的服务的生命周期:如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都在后台运行。如果一个Service被startService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建Service的一个实例(因此你应该知道只需要一次stopService调用)。该Service将会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或自身的stopSelf方法。当然如果系统资源不足,android系统也可能结束服务。

2). 被绑定的服务的生命周期:如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。当连接建立之后,Service将会一直运行,除非调用Context.unbindService 断开连接或者之前调用bindService 的 Context 不存在了(如Activity被finish的时候),系统将会自动停止Service,对应onDestroy将被调用。

3). 被启动又被绑定的服务的生命周期:如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。调用unbindService将不会停止Service,而必须调用 stopService 或 Service的 stopSelf 来停止服务。

4). 当服务被停止时清除服务:当一个Service被终止(1、调用stopService;2、调用stopSelf;3、不再有绑定的连接(没有被启动))时,onDestroy方法将会被调用,在这里你应当做一些清除工作,如停止在Service中创建并运行的线程。

特别注意:

1、你应当知道在调用 bindService 绑定到Service的时候,你就应当保证在某处调用 unbindService 解除绑定(尽管 Activity 被 finish 的时候绑定会自      动解除,并且Service会自动停止);

2、你应当注意 使用 startService 启动服务之后,一定要使用 stopService停止服务,不管你是否使用bindService;

3、同时使用 startService 与 bindService 要注意到,Service 的终止,需要unbindService与stopService同时调用,才能终止 Service,不管 startService 与 bindService 的调用顺序,如果先调用 unbindService 此时服务不会自动终止,再调用 stopService 之后服务才会停止,如果先调用 stopService 此时服务也不会终止,而再调用 unbindService 或者 之前调用 bindService 的 Context 不存在了(如Activity 被 finish 的时候)之后服务才会自动停止;

4、当在旋转手机屏幕的时候,当手机屏幕在“横”“竖”变换时,此时如果你的 Activity 如果会自动旋转的话,旋转其实是 Activity 的重新创建,因此旋转之前的使用 bindService 建立的连接便会断开(Context 不存在了),对应服务的生命周期与上述相同。

5、在 sdk 2.0 及其以后的版本中,对应的 onStart 已经被否决变为了 onStartCommand,不过之前的 onStart 任然有效。这意味着,如果你开发的应用程序用的 sdk 为 2.0 及其以后的版本,那么你应当使用 onStartCommand 而不是 onStart。

生命周期方法说明

onStartCommand() 
当另一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法,服务即会启动并可在后台无限期运行。 如果您实现此方法,则在服务工作完成后,需要由您通过调用 stopSelf() 或 stopService() 来停止服务。(如果您只想提供绑定,则无需实现此方法。)

onBind() 
当另一个组件想通过调用 bindService() 与服务绑定(例如执行 RPC)时,系统将调用此方法。在此方法的实现中,您必须通过返回 IBinder 提供一个接口,供客户端用来与服务进行通信。请务必实现此方法,但如果您并不希望允许绑定,则应返回 null。

onCreate() 
首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。如果服务已在运行,则不会调用此方法。

onDestroy() 
当服务不再使用且将被销毁时,系统将调用此方法。服务应该实现此方法来清理所有资源,如线程、注册的侦听器、接收器等。 这是服务接收的最后一个调用。


http://www.niftyadmin.cn/n/543241.html

相关文章

C#/Sqlite-单机Window 程序 sqlite 数据库实现

数据库分析和选择 Excel 文件 做数据源 限制性比较强,且不适合查询,分析 等操作 Access 数据库 Access 管理数据界面和功能不强 mysql 和sql server 功能满足,但需要安装 最后 还是选择sqlite 数据库 C#中sqlite数据库实现 ste…

Tomcat杂记(1)

Tomcat Tomcat基础 1、安装jdk 1.1 安装jdk [rootmaster1 tomcat]# ls apache-tomcat-8.0.41.tar.gz jdk-8u121-linux-x64.rpm安装jdk [rootmaster1 tomcat]# rpm -ivh jdk-8u121-linux-x64.rpm 1.2 设置java环境变量 [rootmaster1 jdk1.8.0_121]# vim /etc/profile.d/java.sh…

Mac Android Apk反编译

转自:https://www.cnblogs.com/typing/p/7780017.html 在mac os系统上反编译android apk,首先需要准备好以下3个文件: 1、apktool:https://ibotpeaches.github.io/Apktool/install/ 2、dex2jar:https://github.co…

通过使用浏览器对象模型,输出当前浏览器窗口中打开的文档的URL信息,并将显示在窗口中。...

<script type"text/javascript">window.document.write("这个网页文件来自&#xff1a;".bold());window.document.write(window.location.toString());</script>转载于:https://www.cnblogs.com/clear93/p/4624174.html

Android安全之---应用防dex2jar原理及实现

转自&#xff1a;https://www.jianshu.com/p/0306cb947d7a 一、反编译某平台代码 最近在看某外卖平台的代码&#xff0c;发现某外卖平台最新版本版本无法正常的通过dex2jar工具将dex转换出Java源代码&#xff0c;在转换过程中会提示出错&#xff0c;如图&#xff1a; dex2jar…

中企通信亮相WRE制造业CIO峰会2017

由WRE CIO Alliance与Trueadvisor联合主办的“WRE制造业CIO峰会2017”在2017年6月22日-23日在上海锦江汤臣洲际大酒店成功举办&#xff0c;作为WRE首席信息官系列峰会之一的制造业CIO峰会将汇集超过250世界领先制造业的公司CIO, CTO和IT高管&#xff0c;其中包括全球顶尖IT研究…

java中的sleep()和wait()的区别

转自&#xff1a;https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html 对于sleep()方法&#xff0c;我们首先要知道该方法是属于Thread类中的。而wait()方法&#xff0c;则是属于Object类中的。 sleep()方法导致了程序暂停执行指定的时间&#xff0c;让出cpu该其…

浅谈软件创新之处

微信小游戏——跳一跳 作为一个PC端的小程序&#xff0c;微信跳一跳曾一度被刷爆朋友圈&#xff0c;成为最受欢迎的小游戏&#xff0c;它无疑是很成功的。游戏简单&#xff0c;容易上手。那么它如此受欢迎的原因或者说它和其他游戏相比优势和创新在何处呢&#xff1f;首先&…