鸿蒙 ExtensionAbility摘要
组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。每一个具体场景对应一个,开发者只能使用(包括实现和访问)系统已定义的类型。各类型的ExtensionAbility组件均由相应的系统服务统一管理,例如组件由输入法管理服务统一管理。当前系统已定义的ExtensionAbility类型如下表所示。对于系统应用,不受下表约束,允许实现系统已定义的各类ExtensionA
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的进程中运行,完成其页面的布局和渲染。通常用于有进程隔离诉求的模块化开发场景。
更多推荐
所有评论(0)