服务service- remote service

服务service- remote service

ID:9956266

大小:179.50 KB

页数:12页

时间:2018-05-16

服务service- remote service_第1页
服务service- remote service_第2页
服务service- remote service_第3页
服务service- remote service_第4页
服务service- remote service_第5页
资源描述:

《服务service- remote service》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、服务Service-RemoteService分类:Andriod2012-09-2909:36572人阅读评论(1)收藏举报之前所谈的Service属于LocalService,即Service和Client在同一进程内(即同一application内),Service的生命周期服从进程的生命周期。在实际应用上,有时希望Service作为后台服务,不仅被同一进程内的activity使用,也可被其他进程所使用,针对这种情况,需要采用bindService,也就是RemoteService的方式。在A

2、ndroid中,不同app属不同进程(process),进程是安全策略的边界,一个进程不能访问其他进程的存储(例如采用ContentProvider)。在RemoteService中将涉及进程间通信,也就是通常讲的IPC(interprocesscommnication),需要在进程A和进程B之间建立连接,以便进行相互的通信或数据传递。Android提供AIDL(AndroidInterfaceDefinitionLanguage)工具帮助IPC之间接口的建立,大大地简化了开发者视图。右示意图仅用于

3、帮助理解代码。通过下面的步骤实现client和service之间的通信:【1】定义AIDL接口,Eclipse将自动为Service建立接口IService【2】Client连接Service,连接到IService暴露给Client的Stub,获得stub对象;换句话,Service通过接口中的Stub向client提供服务,在IService中对抽象IService.Stub具体实现。 【3】Client和Service连接后,Client可向使用本地方法那样,简单地直接调用IService.S

4、tub里面的方法。下面的例子给出client从提供定时计数的RemoteService,称为TestRemoteService,中获得服务的例子。步骤1:通过AIDL文件定义Service向client提供的接口,ITestRemoteService.aidl文件如下packagecom.wei.android.learning.part5;interfaceITestRemoteService{   intgetCounter();}我们在src的目录下添加一个I

5、>.aidl文件,语法和java的相同。在这个例子中Service很简单,只提供计数器的值,故在接口中我们定义了intgetCounter()。AIDL文件很简单,Eclipse会根据文件自动生成相关的一个javainterface文件,不过没有显示出来,如果直接使用命令行工具会帮助生成java文件。步骤2:RemoteService的编写,通过onBind(),在client连接时,传递stub对象。TestRemoteService.java文件如下:/*Service提供一个定时计数器,采用R

6、unnable的方式实现,复习一下Android学习笔记(三一):线程:Message和Runnable中的例子3。为了避免干扰注意力,灰掉这部分代码。此外,我们提供showInfo(),用于跟踪Service的运行情况,这部分也灰掉。*/publicclassTestRemoteServiceextendsService{   privateHandlerserviceHandler=null;   privateintcounter=0;   privateTestCounterTaskmyTa

7、sk=newTestCounterTask();        publicvoidonCreate(){        super.onCreate();       showInfo("remoteserviceonCreate()");   }    publicvoidonDestroy(){       super.onDestroy();       serviceHandler.removeCallbacks(myTask); //停止计数器       serviceHandler=

8、null;       showInfo("remoteserviceonDestroy()");   }    publicvoidonStart(Intentintent,intstartId){      //开启计数器       super.onStart(intent,startId);       serviceHandler=newHandler();       serviceHandler.postDelayed(myTask,1000);    

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。