更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com,IDL跨进程通信介绍。一个APP可以与另一个APP通信。首先,跨进程通信意味着必须有两个应用程序,一个作为server服务器,一个作为client客户端。接下来,我将带领大家实现一个简单的计算功能。1、首先在一个新的项目中,创建两个模块rpcserver和rpcclient作为服务端和客户端。记得在创建新项目时选择EmptyAbility(Java)。2.在rpcserver中新建一个ServiceAbility3。那么重点来了。这时候需要再创建一个IDL文件,打开rpcserver,点击任意目录创建。创建完成后,系统会将新建的IDL文件放在指定目录下,该文件由系统自动生成。打开IDL文件并添加一个addNumber方法。intaddNumber([in]intnumA,[in]intnumB);打开rpcclient,创建一个与rpcserver同名的IDL文件,当然文件中的addNumber方法也需要保持一致。另外注意添加IDL文件后,需要在gradle中执行compileDebugIdl命令。这样系统会自动生成IDL需要连接的工具类。4.现在准备工作已经完成,接下来就是客户端向服务端传递参数,服务端根据参数返回计算结果。意图);super.setUIContent(ResourceTable.Layout_main_blility);//数字输入框ATextFieldnumFieldA=(TextField)findComponentById(ResourceTable.Id_numA);//数字输入框BTextFieldnumFieldB=(TextField)findComponentById(ResourceTable.Id_numB);//开始通信ButtonComponentcomponent=findComponentById(ResourceTable.Id_start);component.setClickedListener(newComponent.ClickedListener(){@OverridepublicvoidonClick(Componentcomponent){intnumA=numFieldA.getText()==null?0:Integer.parseInt(numFieldA.getText());intnumB=numFieldB.getText()==null?0:Integer.parseInt(numFieldB.getText());//执行通信execute(numA,numB);}});}/***调用服务端获取结果*@paramnumA*@paramnumB*/publicvoidexecute(intnumA,intnumB){Intentintent=newIntent();ElementNameelementName=newElementName("","org.rpc.server",//此值为rpcserver下config中的bundleName"ohos.samples.rpcserver.ServiceAbility");//这个值为rpcserver下对应的ServiceAbilityintent.setElement(elementName);connectAbility(intent,newIAbilityConnection(){@OverridepublicvoidonAbilityConnectDone(ElementNameelementName,IRemoteObjectremoteObject,intresultCode){TestConnectProxyteConnectProxy=newTestConnectProxy);try{//调用服务器获取计算结果intsum=testConnectProxy.addNumber(numA,numB);//在文本组件上显示计算结果((Text)findComponentById(ResourceTable.Id_text_result)).setText("计算结果是:"+sum);}catch(RemoteExceptione){e.printStackTrace();}}@OverridepublicvoidonAbilityDisconnectDone(ElementNameelementName,intresultCode){System.out.println("------resultCode="+resultCode);}});}}服务器代码/***ServiceAbility*/publicclassServiceAbilityextendsAbility{@OverrideprotectedIRemoteObjectonConnect(Intentintent){returnnewTestConnectStubImpl("startingICalculatorInterface");}/***CalculatorInterfaceStubImpl*/privateclassTestConnectStubImplextendsTestConnectStub{publicTestConnectStubImpl(Stringdescriptor){super(descriptor);}/***实现addNumber方法*/@OverridepublicintaddNumber(intnumA,intnumB){returnnumA+numB;}}}5.终于到了检验结果的时候了,先运行rpcserver,运行后,再次运行rpcclient,任意输入两个数字,比如33和55,然后点击开始通信。此时计算结果显示为88,通讯成功~!至此,一个简单的IDL通信demo就完成了。最后附上源码,有兴趣的小伙伴可以下载体验。更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com
