Service具体解释(二):Service生命周期
《 Service具体解释(一):什么是Service》
《 Service具体解释(二):Service生命周期》
《Service具体解释(三):Service的使用》
《Service具体解释(四):绑定服务 与 通信》
《Service具体解释(五):使用Messager进行通信》
《Service具体解释(六):进程间通信-AIDL》
与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 提供一个接口,供client用来与服务进行通信。请务必实现此方法,但假设您并不希望同意绑定,则应返回 null。
onCreate()
首次创建服务时。系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。假设服务已在执行,则不会调用此方法。
onDestroy()
当服务不再使用且将被销毁时,系统将调用此方法。
服务应该实现此方法来清理全部资源,如线程、注冊的侦听器、接收器等。
这是服务接收的最后一个调用。
Service具体解释(二):Service生命周期的更多相关文章
- 如何解释vue的生命周期才能令面试官满意?
当面试官问:"谈谈你对vue的生命周期的理解",听到这句话你是不是心里暗自窃喜:这也太容易了吧,不就是beforeCreate.created.beforeMount.mounte ...
- MVVM框架(二)---生命周期
一.Vue 生命周期图解: 这张图是官方给出的,大家可能都看过.其中我们重点讲述以下几个钩子函数: beforeCreate --> created beforeMount --> ...
- Android(java)学习笔记227:服务(service)之服务的生命周期 与 两种启动服务的区别
1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...
- Android -- Service的开启关闭与生命周期
Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity ...
- Android(java)学习笔记170:服务(service)之服务的生命周期 与 两种启动服务的区别
1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...
- Servlet的创建二以及生命周期
之前说Servlet可以通过实现Servlet接口来创建,但是我们看到了,需要重写该接口中的所有方法. 创建方式二:Servlet的创建还可以继承抽象类GenericServlet并重写其中的抽象方法 ...
- (十二)Maven生命周期和插件
除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...
- .net学习笔记---Asp.net的生命周期之二页生命周期
用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...
- Activity学习(二)——生命周期
一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)
4.1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期.这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命周期.为 ...
随机推荐
- yyyy-MM-dd HH:mm:ss is Invalid Date in Safari, IE等浏览器下
一.踩坑背景 在做某个项目的过程中,系统要求兼容safari,在使用Element-ui情况下,用到了datepicker组件,但是datepicker在type为daterange情况下,页面首次加 ...
- angularJS简介及其特点—— 五大特性,加快 Web 应用开发
AngularJS 是谷歌的一个 JavaScript 框架,旨在简化前端应用程序的开发. 一. 关于和jquery的比较 首先angular是一个mvc框架,它与jquery不同之处在于,前者致力于 ...
- ZOJ 3631 Watashi's BG DFS
J - Watashi's BG Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- opencv第三课 Canny边缘检测
#include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace ...
- 解决IE11下载文件 文件名乱码问题
1.Win + R输入gpedit.msc打开组策略编辑器:(不会请看下图) 2.定位到计算机配置→管理模板→windows组件→Internet Explorer→自定义用户代理字符串(有些系统用的 ...
- angularjs中如何在异步请求执行完以后再执行其他函数?
angularjs中如何在异步请求执行完以后再执行其他函数? 之前脑袋回路就是从上到下的执行js,直到有一次我的页面上已经显示了空才走到angularjs里的$http的成功回调函数里,然后才开始正视 ...
- DU 4609 3-idiots FFT
题意还是比较好懂. 给出若干个木棍的长度,问这些木棍构成三角形的可能性. 那么公式很容易知道 就是这些木棍组成三角形的所有情况个数 除以 从n个木棍中取3个木棍的情况数量C(n, 3) 即可 但是很显 ...
- 与Win8之磁盘活动时间100%斗争心得
Windows8因人而异地会在使用过程中磁盘活动时间无缘无故提升到100%并且可能出现持续性抽风现象,具体表现为0%瞬间飙升至100%后又回落,或者一直保持在100%导致使用过程卡顿,认真阅读本文有助 ...
- Bootstrap 3之美06-Page Header、Breadcrumbs、Dropdowns、Button Dropdowns、用Button和Dropdowns模拟Select、Input Groups、Thumbnails、Panels、Wells
本篇主要包括: ■ Page Header■ Breadcrumbs■ Button Groups■ Dropdowns■ Button Dropdowns■ 用Button和Dropdo ...
- datagrid在MVC中的运用10-勾选
本文体验与勾选有关的特性. 需要加载的books.json 展开{ "total": 4, "rows": [ { "productid": ...