codecamp

鸿蒙OS 接口描述语言简介

当客户端和服务器通信时,需要定义双方都认可的接口,以保障双方可以成功通信,HarmonyOS IDL(HarmonyOS Interface Definition Language)则是一种定义此类接口的工具。HarmonyOS IDL先把需要传递的对象分解成操作系统能够理解的基本类型,并根据开发者的需要封装跨边界的对象。在HarmonyOS中,HarmonyOS IDL接口包含面向应用程序的北向接口和面向硬件设备的南向接口。

图1 HarmonyOS IDL接口描述语言 img

HarmonyOS IDL接口描述语言主要用于:

  • 声明系统服务对外提供的服务接口,根据接口声明在编译时生成跨进程调用(IPC)或跨设备调用(RPC)的代理(Proxy)和桩(Stub)的C/C++代码或Java代码。

  • 声明Ability对外提供的服务接口,根据接口声明在编译时生成跨进程调用(IPC)或跨设备调用(RPC)的代理(Proxy)和桩(Stub)的C/C++代码或Java代码。

图2 IPC/RPC通信模型 点击放大

使用HarmonyOS IDL接口描述语言声明接口具有以下优点:

  • HarmonyOS IDL中是以接口的形式定义服务,可以专注于定义而隐藏实现细节。
  • HarmonyOS IDL中定义的接口可以支持跨进程调用或跨设备调用。根据HarmonyOS IDL中的定义生成的信息或代码可以简化跨进程或跨设备调用接口的实现。

采用HarmonyOS IDL描述的接口代码示例如下:

package ohos.app; import ohos.app.IAbilityConnection;import ohos.os.IBroker; sequenceable ohos.content.AbilityInfo;sequenceable ohos.content.Intent; interface ohos.app.IAbilityManager {    int StartAbility([in] Intent intent);     void SetAbilitySliceCallback([in] IBroke broker, [in] IAbilityConnection callback);     [oneway]    void ExitAbility([in] AbilityInfo abilityInfo);}

说明

  • HarmonyOS IDL接口描述文件是以“.idl”为扩展名的文件。
  • HarmonyOS IDL接口描述文件目录层级必须按照包名的层次进行定义,例如:IAbilityManager类的IDL文件必须放在ohos/app/目录下。
  • HarmonyOS IDL接口描述文件主要以接口类名命名,例如:IAbilityManager.idl。
鸿蒙OS overview
鸿蒙OS IDL接口开发步骤
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }