河北师范大学软件学院《Android课程》-实验手册第1页共21页《Android课程》实验手册第十章Android中服务(Service)的使用编写人:武永亮编写日期:2012-8-23河北师范大学软件学院《Android课程》-实验手册第2页共21页修改记录修改时间修改人修改内容2012.8.23武永亮文档创建2013-1-31李玮玮文档修改河北师范大学软件学院《Android课程》-实验手册第3页共21页目录一、内容概述...................................................................................................................4二、实验一Service生命周期...........................................................................................42.1实验目的............................................................................................................42.2准备知识............................................................................................................42.3实验步骤............................................................................................................62.4实验结论...........................................................................................................11三、实验二自定义Service............................................................................................123.1实验目的..........................................................................................................123.2实验步骤..........................................................................................................123.4实验结论..........................................................................................................14四、实验三系统常见Service调用.................................................................................144.1实验目的..........................................................................................................144.2准备知识..........................................................................................................144.3实验步骤..........................................................................................................154.4实验结论..........................................................................................................174.5扩展知识——Android的系统服务一览..............................................................18五、作业........................................................................................................................215.1自定义Service...................................................................................................215.2访问自定义Service............................................................................................215.3调用系统短信管理器(SmsManager)服务,实现发送短信功能.........................21河北师范大学软件学院《Android课程》-实验手册第4页共21页第十章Android中服务(Service)的使用一、内容概述本章的主要内容有对服务的简介,Android中Service的创建,Android中Service的调用,Android中Service的生命周期,Android中常见的系统服务。通过本章实验我们能够掌握Android中Service的用法,能够自定义Service,能够调用系统常见的Service。二、实验一Service生命周期2.1实验目的本次实验我们一起学习Service的生命周期。经过本次实验需要明白Service的生命周期和Activity的生命周期有何异同。了解Service的几种常用回调函数。2.2准备知识1.Service概述Service是android系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。2.Service的特点:没有用户界面,只能在后台运行3.Service启动方式Service的启动有两种方式:context.startService()和context.bindService()。4.Service和Activity的应用场合Activity:某程序组件需要在运行时向用户呈现某种界面;某程序需要在运行时与用户进行交互;Service:不需要用户界面或不需要与用户进行交互比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等5.Service开发步骤开发Service子类,继承Service;在AndroidManifest.xml文件中配置该Service;注:配置Service时,可通过intent-filter…/元素指定该Service可被哪些intent启动;Service和Activity均从Context派生,均可调用Context里定义的getResources()、河北师范大学软件学院《Android课程》-实验手册第5页共21页getContentResolver()等方法;6.Service的常用回调函数abstractIBinderonBind(Intentintent):该方法是Service子类必须实现的方法。该方法返回的IBinder对象可与Service组件进行通信;voidonCreate():当Service被第一次创建时回调该方法;voidonDestroy():当Service被关闭前回调该方法;voidonStartCommand(Intentintent,intflags,intstartId):当客户端调用startService(intent)方法启动Service时回调该方法;该方法的早期版本是voidonStart(Intentintent,intstartId)。booleanonUnbind(Intentintent):当Service上绑定的所有客户端都断开连接时回调该方法;7.Service的启动流程图10.1Service生命周期(一)context.startService()启动流程:context.startService()-onCreate()-onStart()-Servicerunning-context.stopService()-onDestroy()-Servicestop河北师范大学软件学院《Android课程》-实验手册第6页共21页如果Service还没有运行,则android先调用onCreate(),然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。如果stopService的时候会直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。所以调用startService的生命周期为:onCreate--onStart(可多次调用)--onDestroy(二)context.bindService()启动流程:context.bindService()-onCreate()-onBind()-Servicerunning-onUnbind()-onDestroy()-ServicestoponBind()将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的实例、运行状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind-onDestroy相应退出。所以调用bindService的生命周期为:onCreate--onBind(只一次,不可多次绑定)--onUnbind--onDestory。在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次8.Service生命周期Service的生命周期并不像Activity那么复杂,它只继承了onCreate()、onStart()、onDestroy()三个方法当我们第一次启动Service时,先后调用了onCreate()、onStart()这两个方法;当停止Service时,则执行onDestroy()方法。这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。它可以通过Service.stopSelf()方法