ExtensionAbility组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。

每一个具体场景对应一个ExtensionAbilityType,开发者只能使用(包括实现和访问)系统已定义的类型。各类型的ExtensionAbility组件均由相应的系统服务统一管理,例如InputMethodExtensionAbility组件由输入法管理服务统一管理。

当前系统已定义的ExtensionAbility类型如下表所示。

说明:

  • “是否允许三方应用实现”是指:对于一类ExtensionAbility,三方应用能否继承该ExtensionAbility父类实现自己的业务逻辑。
  • “是否允许三方应用访问”是指:有些ExtensionAbility会对外提供一些服务,这些ExtensionAbility可能允许三方访问,也可能不允许。
  • “是否有独立Extension沙箱”是指:已经开发Extension都是和主应用共沙箱运行,API12及其之后新增Extension默认独立沙箱运行,输入法Extension由于安全机制管控改为独立沙箱运行。
  • “启动Extension传递共享数据是否严格模式访问”是指:共享数据可通过配置应用的data-group-ids和ExtensionAbility的dataGroupIds实现。严格模式访问表示只读,非严格模式访问表示可以读写。

对于系统应用,不受下表约束,允许实现系统已定义的各类ExtensionAbility,也允许访问提供的各类对外服务。

ExtensionAbility类型 功能描述

是否允许三

方应用实现

是否允许三

方应用访问

是否有独立

Extension沙箱

启动Extension

传递共享数据

是否严格模式访问

FormExtensionAbility FORM类型的ExtensionAbility组件,用于提供服务卡片的相关能力。 非严格模式访问共享数据,可以读写共享数据。
WorkSchedulerExtensionAbility WORK_SCHEDULER类型的ExtensionAbility组件,用于提供延迟任务的相关能力。 不涉及 非严格模式访问共享数据,可以读写共享数据。
InputMethodExtensionAbility INPUT_METHOD类型的ExtensionAbility组件,用于实现输入法应用的开发。 开发者在输入法管理中启用完整体验模式,即开启非严格模式,可读写共享数据;不启用完整体验模式,默认为严格模式,只能读取共享数据。
BackupExtensionAbility BACKUP类型的ExtensionAbility组件,用于提供备份及恢复应用数据的能力。 不涉及 非严格模式访问共享数据,可以读写共享数据。
DriverExtensionAbility DRIVER类型的ExtensionAbility组件,用于提供驱动相关扩展框架 非严格模式访问共享数据,可以读写共享数据。
EmbeddedUIExtensionAbility EMBEDDED_UI类型的ExtensionAbility组件,用于提供跨进程界面嵌入的能力。 非严格模式访问共享数据,可以读写共享数据。
ShareExtensionAbility SHARE类型的ExtensionAbility组件,用于提供分享模板服务扩展的能力。 非严格模式访问共享数据,可以读写共享数据。
FenceExtension FENCE类型的ExtensionAbility组件,用于提供地理围栏扩展的能力。 非严格模式访问共享数据,可以读写共享数据。

ExtensionAbilityType

指示扩展组件的类型。

系统能力: SystemCapability.BundleManager.BundleFramework.Core

名称 说明
FORM 0

FormExtensionAbility:卡片扩展能力,提供卡片开发能力。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

WORK_SCHEDULER 1 WorkSchedulerExtensionAbility:延时任务扩展能力,允许应用在系统闲时执行实时性不高的任务。
INPUT_METHOD 2 InputMethodExtensionAbility:输入法扩展能力,用于开发输入法应用。
SERVICE 3 ServiceExtensionAbility:后台服务扩展能力,提供后台运行并对外提供相应能力。
ACCESSIBILITY 4
AccessibilityExtensionAbility:无障碍服务扩展能力,支持访问与操作前台界面。
DATA_SHARE 5 DataShareExtensionAbility :数据共享扩展能力,用于对外提供数据读写服务。
FILE_SHARE 6 FileShareExtensionAbility:文件共享扩展能力,用于应用间的文件分享。预留能力,仅系统应用支持。
STATIC_SUBSCRIBER 7 StaticSubscriberExtensionAbility :静态广播扩展能力,用于处理静态事件,比如开机事件。
WALLPAPER 8 WallpaperExtensionAbility:壁纸扩展能力,用于实现桌面壁纸。预留能力,仅系统应用支持。
BACKUP 9 BackupExtensionAbility:数据备份扩展能力,提供应用数据的备份恢复能力。
WINDOW 10 WindowExtensionAbility:界面组合扩展能力,允许系统应用进行跨应用的界面拉起和嵌入。
ENTERPRISE_ADMIN 11 EnterpriseAdminExtensionAbility:企业设备管理扩展能力,提供企业管理时处理管理事件的能力,比如设备上应用安装事件、锁屏密码输入错误次数过多事件等。
THUMBNAIL 13 ThumbnailExtensionAbility:文件缩略图扩展能力,用于为文件提供图标缩略图的能力。预留能力,仅系统应用支持。
PREVIEW 14 PreviewExtensionAbility:文件预览扩展能力,提供文件预览的能力,其他应用可以直接在应用中嵌入显示。预留能力,仅系统应用支持。
PRINT10+ 15 PrintExtensionAbility:文件打印扩展能力,提供应用打印照片、文档等办公场景。仅系统应用支持。
SHARE10+ 16 ShareExtensionAbility:提供分享业务能力,为开发者提供基于UIExtension的分享业务模板。
PUSH10+ 17 PushExtensionAbility:推送扩展能力,提供推送场景化消息能力。预留能力,仅系统应用支持。
DRIVER10+ 18 DriverExtensionAbility:驱动扩展能力,提供外设驱动扩展能力,仅系统应用支持。
ACTION10+ 19 ActionExtensionAbility:自定义服务扩展能力,为开发者提供基于UIExtension的自定义操作业务模板。
ADS_SERVICE11+ 20 AdsServiceExtensionAbility:广告服务扩展能力,对外提供后台自定义广告业务服务,仅系统应用支持。
EMBEDDED_UI12+ 21 EmbeddedUIExtensionAbility:嵌入式UI扩展能力,提供跨进程界面嵌入的能力。
INSIGHT_INTENT_UI12+ 22 InsightIntentUIExtensionAbility:为开发者提供能被小艺意图调用,以窗口形态呈现内容的扩展能力。
UNSPECIFIED 255 不指定类型,配合queryExtensionAbilityInfo接口可以查询所有类型的ExtensionAbility。

访问指定类型的ExtensionAbility组件

所有类型的ExtensionAbility组件均不能被应用直接启动,而是由相应的系统管理服务拉起,以确保其生命周期受系统管控,使用时拉起,使用完销毁。ExtensionAbility组件的调用方无需关心目标ExtensionAbility组件的生命周期。

实现指定类型的ExtensionAbility组件

以实现卡片FormExtensionAbility为例进行说明。卡片框架提供了FormExtensionAbility基类,开发者通过派生此基类(如MyFormExtensionAbility),实现回调(如创建卡片的onCreate()回调、更新卡片的onUpdateForm()回调等)来实现具体卡片功能,具体见开发指导见服务卡片

卡片FormExtensionAbility实现方不用关心使用方何时去请求添加、删除卡片,FormExtensionAbility实例及其所在的ExtensionAbility进程的整个生命周期,都是由卡片管理系统服务FormManagerService进行调度管理。

同一应用内的所有同类型的ExtensionAbility运行在同一独立进程(除ServiceExtensionAbility、DataShareExtensionAbility外)

UIServiceExtension

UIServiceExtension是UIService类型的ExtensionAbility浮窗类组件,提供UI界面(例如预览界面)和后台服务能力。组件内部持有了一个UIServiceExtensionContext,通过UIServiceExtensionContext提供了丰富的接口供外部使用。

启动UIServiceExtension

应用通过startUIServiceExtensionAbility()方法启动一个UIServiceExtension。UIServiceExtension启动后,其生命周期独立于客户端,即使客户端已经销毁,该后台服务仍可继续运行,窗口创建失败或销毁后该服务会被销毁。

客户端连接服务端

客户端通过connectUIServiceExtensionAbility()连接服务端,获取并保存UIServiceProxy对象。通过该proxy对象的sendData()方法发送数据给服务端。服务端通过UIServiceExtensionAbility类onData()(系统接口)方法接收客户端数据。

本文描述中称被启动的UIServiceExtension为服务端,称启动UIServiceExtension的组件为客户端。

EmbeddedUIExtensionAbility

EmbeddedUIExtensionAbility是EMBEDDED_UI类型的ExtensionAbility组件,提供了跨进程界面嵌入的能力。

EmbeddedUIExtensionAbility需要和EmbeddedComponent一起配合使用,开发者可以在UIAbility的页面中通过EmbeddedComponent嵌入本应用的EmbeddedUIExtensionAbility提供的UI。EmbeddedUIExtensionAbility会在独立于UIAbility的进程中运行,完成其页面的布局和渲染。通常用于有进程隔离诉求的模块化开发场景。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐