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()

当服务不再使用且将被销毁时,系统将调用此方法。

服务应该实现此方法来清理全部资源,如线程、注冊的侦听器、接收器等。

这是服务接收的最后一个调用。

时间: 2024-10-06 00:44:59

Service具体解释(二):Service生命周期的相关文章

Android -- Service的开启关闭与生命周期

Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化等等. 生命周期                                                                                  context.startService() 启动流程: con

Servlet(二)生命周期

Servlet的生命周期可以定义为从其被创建到其被销毁的整个流程,下面是Servlet生命的常规线路: 容器调用init()方法进行Servlet的初始化 Servlet调用service()方法去处理客户端的请求 容器调用destroy()方法将Servlet销毁 最后,Servlet被JVM的GC线程当作垃圾处理掉 init()方法: init()方法只会在创建Servlet时被调用一次,不管有多少用户请求.通常情况下,Servlet在容器第一次接收到用户请求时被创建,但也可以通过load-

Android的服务(Service)(一)生命周期

本篇和接下来的几篇我们来浅析一下Android的另外一个非常重要的组件:Service,看到这里我们的脑海里都会涌现出什么词语呢?诸如:无用户交互界面,耗时后台操作,服务(级别)进程,远程调用. 1.看看Service的代码,好干净的感觉,没错,它就定义了一些生命周期的方法以及一些成员,注意这些成员中并没有Window,所以Service是没有用户界面的. 2.Service能进行后台耗时操作只是因为她的进程级别,并不是因为这个组件本身,因为执行后台操作的根本是工作线程.做应用和系统的都很了解进

Android(java)学习笔记227:服务(service)之服务的生命周期(service)

1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.接下来就简单概括性描述一下: (1)start的方式开启服务,服务会执行onCreate方法 (2)如果服务已经被创建,就不会再去执行onStartCommand()  (onStart过时) (3)停止服务,服务会执行onDestory(): (4)如果服务已经停止,多次调用stopService()无效的

Service 绑定方式启动,生命周期。绑定方式读取服务器数据

package com.example.lenovo.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class MyService extends Service { public MyService() { Log.e("TAG"

(十二)Maven生命周期和插件

除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package.Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin完成.生命周期和插件两者协同工作,密不可分. 1.Maven生命周期 我们在开发项目的时候,我们不断地在经历编译.测试.打包.部署等过程,maven的生命周期就是对所有这些

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)

4.1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期.这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命周期.为了使读者更容易理解,本节将以Android原生SDK中Activity类的生命周期结合Eclipse中的LogCat调试工具进行实战讲解. 4.1.1  Activity的生命周期 先仔细的观察图4-1的内容,这是谷歌官方给出的Activity生命周期流程图,它包括了一个安卓应用从被创建到结束时所经

Activity学习(二)——生命周期

一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,如下设置 <actionandroid:name="android.intent.action.MAIN" /> 当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关操作.当启动其他的Activity时这

Spring 入门教程(二) 生命周期和作用域

下面的知识点是针对使用配置文件讲的(annotation对应标签后面文章会详细阐述) Bean的生命周期: 为什么关心这个问题? 我们使用IOC的目的就是为了让Spring IOC帮我们管理对象,从而不需要去自己手动去new ,何时new,怎么管理对象间依赖,什么时候销毁等等很多问题.而对象在Spring容器看来就是一个个bean,理所当然要理解Bean的生命周期. 生命周期的过程有哪些? 定义.初始化.使用.销毁. 初始化:(1)实现org.springframework.beans.fact

多线程(二)生命周期和同步

接上文继续学习. 四:线程的生命周期: 由上图可以看出,一个线程由出生到死亡分为五个阶段: 1).创建状态  ?当用new操作符创建一个新的线程对象时,该线程处于创建状态. ?处于创建状态的线程只是一个空的线程对象,系统不为它分配资源 2). 可运行状态 ?执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体-run()方法,这样就使得该线程处于可运行( Runnable )状态. ?这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行. 3)