本地通信服务_第1页
本地通信服务_第2页
本地通信服务_第3页
本地通信服务_第4页
本地通信服务_第5页
已阅读5页,还剩9页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

本地通信服务目录绑定本地Service绑定本地Service使用实例小结绑定本地ServicestartService()与bindService()启动Service的区别:使用startService()方法启动Service,如若未调用stopService()方法来停止Service,这个Service就会随着Android系统的启动而启动,随着Android系统的关闭而关闭。也就是Service会在Android系统启动后一直在后台运行,直到Android系统关闭后Service才停止。并且,这种方式下Service和Activity之间无法进行通信和数据交换。就如同平时我们寄信,当信寄出去后,我们无法得到信是否送达、在送信过程中的状况等等,当我们想得到这些信息时,也就是当我们想Service与访问者之间进行方法调用以及数据交换时,就应该用到bindService()和unbindService()方法来启动、关闭Service。绑定本地ServiceContext的bindService()方法该方法的参数解释如下:Service:该参数通过Intent指定要启动的Service。conn:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接状态。当访问者访问者与Service之间连接成功时将回调该ServiceConnection对象的onServiceConnected(ComponentNamename,Ibinderservice)方法;当Service所在的宿主进程由于异常中止或其他原因终止,导致该Service与访问者之间断开连接时回调该ServiceConnection对象的onServiceDisconnected(ComponentNamename)方法。flags:指定绑定时是否主动创建Service(如果Service还未创建)。该参数可以是0(不自动创建)或BIND_AUTO_CREATE(自动创建)。bindService(Intentservice,ServiceConnectionconn,intflags)绑定本地Service如何绑定本地Service并与之通信?在ServiceConnection对象的onServiceConnected()方法中有一个Ibinder对象,该对象即可实现与被绑定Service之间的通信。当开发Service类时,该Service类必须提供一个IBinderonBind(Intentintent)方法,在绑定本地Service的情况下,onBind(intent)方法返回的IBinder对象将会传给ServiceConnection对象里onServiceConnected(ComponentNamename,IBinderservice)方法的service参数,这样访问者就可通过该IBinder对象与Service进行通信。(ServiceConnection对象是访问者Activity里定义的对象,作为绑定服务时调用的bindService方法的第二个参数)。实际开发时,通常采用继承Binder(IBinder的实现类)的方式实现自己的IBinder对象。示例:模拟任务下载进度显示器点击“开始下载”按钮,启动一个Service开始模拟任务下载点击“显示当前下载进度”按钮,显示当前完成下载的百分比点击“停止下载”按钮,停止启动的Service,结束当前正在模拟下载的任务1.新建一个Android项目,命名为taskDownload。2.在values下的strings.xml里添加本项目所要使用到的字符串<?xmlversion="1.0"encoding="utf-8"?><resources> <stringname="hello">HelloWorld!</string> <stringname="app_name">Service与绑定者进行通信</string> <stringname="bind">开始下载</string> <stringname="unbind">停止下载</string> <stringname="getServiceStatus">显示当前下载进度</string> </resources>示例:模拟任务下载进度显示器3.在layout下添加布局文件main.xml。<LinearLayout…… ><Button android:id="@+id/bind" …… android:text="@string/bind" /><Button android:id="@+id/unbind" …… android:text="@string/unbind" /><Button android:id="@+id/getServiceStatus" …… android:text="@string/getServiceStatus" /> </LinearLayout>示例:模拟任务下载进度显示器4.在src下添加一个Service类,命名为BindServicepublicclassBindServiceextendsService{ //定onBinder方法所返回的对象

privateMyBinderbinder=newMyBinder();

privatebooleanquit; intnum=0; publicclassMyBinderextendsBinder{ publicStringgetData() { //获取Service的运行状态:count returnnum+""; }} publicIBinderonBind(Intentintent){ System.out.println("ServiceisBinded"); Toast.makeText(BindService.this,"ServiceisonBinded",Toast.LENGTH_LONG).show(); returnbinder; }示例:模拟任务下载进度显示器5.在src下添加一个Service类,命名为BindService。 publicvoidonCreate(){ super.onCreate(); newThread(){ publicvoidrun(){ while(!quit){ try{ Thread.sleep(1000); }catch(Exceptione){ e.printStackTrace(); } num++; } } }.start(); Toast.makeText(BindService.this,"ServiceisCreated",Toast.LENGTH_LONG).show();} 示例:模拟任务下载进度显示器6.在AndroidManifest.xml中对BindService进行注册7.在AndroidManifest.xml中添加发送短信的权限代码<serviceandroid:name=".BindService"> <intent-filter> <!--为该Service组件的intent-filter配置action--> <actionandroid:name="SICT.SERVICE.BIND_SERVICE"/> </intent-filter></service><uses-permissionandroid:name="android.permission.SEND_SMS"/>示例:模拟任务下载进度显示器8.修改src下的MainActivity.java,实现三个按钮的单击功能。publicclassMainActivityextendsActivity{ Buttonbind,unbind,getServiceStatus; //启动的Service的IBinder对象

BindService.MyBinderbinder; //定义一个ServiceConnection对象

privateServiceConnectionconn=newServiceConnection(){ //当该Activity与Service连接成功时回调该方法

publicvoidonServiceConnected(ComponentNamename,IBinderservice){ //获取Service的onBind方法所返回的MyBinder对

温馨提示

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

最新文档

评论

0/150

提交评论