Android移动应用开发教程 课件 5.2、Service服务_第1页
Android移动应用开发教程 课件 5.2、Service服务_第2页
Android移动应用开发教程 课件 5.2、Service服务_第3页
Android移动应用开发教程 课件 5.2、Service服务_第4页
Android移动应用开发教程 课件 5.2、Service服务_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Service服务Android汇报人:XXX目录1234Service概述启动式服务绑定式服务案例实现01章节PARTService概述添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字

Service服务有两种使用类型:启动服务(StartService):用于应用程序内部,应用程序组件(例如Activity)通过调用startService()方法启动服务。绑定服务(BindService):用于Android系统内部的应用程序之间,应用程序组件通过调用bindService()方法绑定服务。回调方法:onStartCommand()允许组件启动服务,onBind()方法允许组件绑定服务。通过调用Context.startService()或Context.bindService()方法启动服务。Service概述方法名称说明onBind(Intentintent)当其他组件调用bindService时,系统调用此方法,是一个必须实现的一个方法,返回一个绑定的接口IBinder给ServiceonCreate()当Service第一次被创建时,由系统调用onStartCommand(Intentintent,intstartID)当通过startService()方法启动Service时,该方法被调用。如果实现了此方法,则当任务完成时需调用stopSelf()或stopService()方法停止服务。onDestroy()当Service不再使用,系统调用该方法onUnbind()当绑定服务解除时,系统调用此方法Service概述采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStartCommand()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStartCommand()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这时调用者和服务绑定在一起,调用者退出时,系统先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()以及onDestroy()方法。在项目的AndroidManifest.xml配置文件中在<application>标签中通过<service>元素进行声明。如下所示:<serviceandroid:name="MyService">

<intent-filter>

<actionandroid:name="com.cqcet.MyService"/>

</intent-filter></service>02章节PART启动式服务添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字Service是所有服务的基类。当继承该类时,按需实现其中的onCreate()、onStartCommand()、onDestroy()方法,大多数情况下在onStartCommand()方法中处理服务内容。启动式服务表5-3onStartCommand()方法返回值意义常量值意义START_NOT_STICKY方法完成后停止服务,不重新创建服务,除非有PendingIntent要发送START_STICKY方法完成后停止服务,然后重新创建服务并调用onStartCommand(),但是不重新发送最后的Intent。系统使用空Intent调用方法,除非有PendingIntent来启动服务START_REDELIVER_INTENT方法完成后停止服务,重新创建服务并使用发送给服务的最后Intent再次调用onStartCommand(),全部PendingIntent依次发送Intentintent=newIntent(this,

ServiceSample.class);startService(intent);Intentintent=newIntent(this,

ServiceSample.class);stopService(intent);03章节PART绑定式服务添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字使用bindService方式启动服务,其他组件(比如Activity)绑定到服务后可以向它发送请求,可以接受从它返回的响应,它甚至还提供了进程间通信(IPC)的功能。一个service要想能够被其他组件绑定,那么必须实现服务的onBind()方法,且必须返回一个IBinder对象,然后其他组件可以通过这个IBinder对象与该service进行通信。客户端通过bindService()方法绑定到服务,传递ServiceConnection的实现对象。这样客户端必须提供SerciceConnection接口的实现类(重写其中的onServiceConnected()、onServiceDisconnected()方法),它监视客户端与服务器端之间的连接。bindService()方法返回后,当Android系统创建客户端与服务之间的连接时,系统调用ServiceConnection接口的onServiceConnection()方法,发送IBinder对象实现客户端与服务之间的通信。客户端可以调用unbindService()方法解除绑定。绑定式服务三种实现方式:1.继承Binder类1)在service服务类中声明一个继承自Binder类的内部类。2)在service服务类中声明一个上一步创建的内部类的实例。3)在client端,在onServiceConnected()方法中得到从onBind()方法中返回的IBinder对象,然后可以通过该对象中获得相应的service实例,依据service实例中提供的公共方法就可以向服务发送消息或获取服务提供的资源了。绑定式服务publicclassLocalService

extendsService{privatefinalIBinder

binder=newLocalBinder();privatefinalRandomgenerator=newRandom();publicclassLocalBinder

extendsBinder{

LocalService

getService(){

returnLocalService.this;

}

}

@Override

publicIBinder

onBind(Intentintent){

returnbinder;

}//扩展方法,供客户端调用

publicintgetRandomNumber(){

returngenerator.nextInt(100);}}publicclassBindingActivity

extendsActivity{

LocalService

localService;

booleanbound=false;

@OverrideprotectedvoidonCreate(BundlesaveInstanceState){

super.onCreate(saveInstanceState);

setContentView(R.layout.main);}@OverrideprotectedvoidonStart(){

super.onStart();

Intentintent=newIntent(this,LocalService.class);

//绑定服务,需传递ServiceConnection对象实现bindService(intent,connection,Context.BIND_AUTO_CREATE);}@Overrideprotectec

voidonStop(){

super.onStop();

if(bound){

unbindService(connection);

bound=false;

}}publicvoidonButtonClick(Viewv){

if(bound){

Intnum=localService.getRandomNumber();

Toast.makeText(this,“获得随机数:”+num,Toast.LENGTH_SHORT).show();

}}

//实现ServiceConnection接口类privateServiceConnection

connection=newServiceConnection(){

publicvoidonServiceConnection(ComponentName

className,IBinder

services){

LocalService.LocalBinder

binder=(LocalService.LocalBinder)service;

localService=binder.getService();

bound=true;}publicvoidonServiceDisconnected(ComponentName

arg0){

bound=false;}};}三种实现方式:2.使用Messenger1)在service服务内部需要定义一个Handler类或子类的实现,它被用来处理从每一个client发送过来的请求。2)通过这个Handler,来生成一个Messenger实例。3)在service的onBind()方法中,需要向client返回由该Messenger生成的一个IBinder实例。4)client使用从service返回的IBinder实例来初始化一个Messenger,

然后使用该Messenger与service进行通信5)service通过它自身内部的Handler实现(handleMessage()方法)来处理从client发送过来的请求3.使用AIDL(略)绑定式服务//service端的Handler的实现privateclassIncomingHandler

extendsHandler{@OverridepublicvoidhandleMessage(Messagemsg){intvalue=msg.arg1;super.handleMessage(msg);}}当然还需实现service的onBind接口方法,返回IBinder对象:@OverridepublicIBinder

onBind(Intentintent){returnmessenger.getBinder();}在另一个工程中也定义一个继承自Handler的内部类,用来实现对服务返回的Messenger的处理,代码如下://client端Handler的实现privateclassIncomingHandler

extendsHandler{//处理从Service发送至该Activity的消息@OverridepublicvoidhandleMessage(Messagemsg){Toast.makeText(this,"servicemsgis:"+msg.arg1,Toast.LENGTH_SHORT)super.handleMessage(msg);}}同时实现ServiceConnection接口类的定义,其中处理对服务连接成功后,实现向服务发送消息等事务。代码如下://client端ServiceConnection

的实现privateServiceConnection

myRe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论