预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

本文由麦可网http://www.microoh.com/收集整理,转载请注明出处。 Android进程间通信 一、本地服务与远程服务(AIDL服务)区别 本地服务:无法供在设备上运行的其他应用程序访问。一般而言,这些服务类型仅支持承载该服务的应用程序。onBind方法为在同一设备上运行的外部应用程序提供一个接口来与服务通信。该方法在本地服务中返回null.启动服务:由Context.startService()启动。停止服务:客户端调用服务的Context.stopService()或者服务自己调用stopSelf(). Java代码 Importandroid.app.Service; PublicclassTestServiceextendsService { @Override PublicvoidonCreate(){ { Super.onCreate(); } @Override PublicIBinderonBind(Intentintent){ { Returnnull; } } 远程服务:使用AIDL(AndroidInterfaceDefinitionLanguage---Android接口定义语言)向客户端定义自身。onBind方法返回非空。可通过进程间通信(Context.bindService())进行调用。 二、AIDL服务要构建远程服务,执行以下步骤:(1)编写一个AIDL文件来向客户端定义接口。包名与Android项目同。(2)将AIDL文件添加到Eclipse项目的src目录下。编译器将在gen下自动生成Java接口。(3)实现一个服务并从onBind()方法返回所生成的接口。(4)将服务配置添加到AndroidManifest.xml文件中。 例:股票报价服务的AIDL定义 Java代码 Packagecom.androidbook.stockquoteservice; InterfaceIstockQuoteService { DoublegetQuote(Stringticker); } 随后,编译器将在gen目录下生成IstockQuoteService.java文件。名为Stub的staticfinal抽象类扩展了android.os.Binder并实现了IstockQuoteService.名为Proxy的内部类实现了IstockQuoteService,后者是Stub类的代理。在服务类中实现AIDL接口:Java代码 PublicclassStockQuoteServiceextendsService { PublicclassStockQuoteServiceImplextendsIstockQuoteService.Stub { @Override PublicdoublegetQuote(Stringticker)throwRemoteException { Return200.0; } } @Override PublicvoidonCreate(){super.onCreate();} @Override PublicvoidonDestroy(){super.onDestroy();} @Override PublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);} @Override PublicIbinderonBind(Intentintent){returnnewStockQuoteServiceImpl();} 将服务向客户端公开:XML/HTML代码 <serviceandroid:name="StockQuoteService"> <intent-filter> <actionandroid:name="com.androidbook.stockquoteservice.IStockQuoteService"/> </service> 三、从客户端应用程序调用服务当客户端与服务通信时,它们必须有一个协议或契约。在Android中,这个契约就是AIDL。所以,使用服务的第一步是,获取服务的AIDL文件并将其复制到客户端项目中。提供ServiceConnection接口的实现: Java代码 privateServiceConnectionmServiceConn=newServiceConnection() { publicvoidonServiceConnected(ComponentNamename,IBinderservice){ stockService=IStockQuoteService.Stub.asInterface(service); } pub