1# ExtensionAbility组件 2<!--Kit: Ability Kit--> 3<!--Subsystem: Ability--> 4<!--Owner: @yewei0794--> 5<!--Designer: @jsjzju--> 6<!--Tester: @lixueqing513--> 7<!--Adviser: @huipeizi--> 8 9 10[ExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-extensionAbility.md)组件是一种面向特定场景的应用组件。每一个具体场景对应一个不同类型的ExtensionAbility,例如用于卡片场景的[FormExtensionAbility](../reference/apis-form-kit/js-apis-app-form-formExtensionAbility.md),用于输入法场景的[InputMethodExtensionAbility](../reference/apis-ime-kit/js-apis-inputmethod-extension-ability.md),用于延时任务场景的[WorkSchedulerExtensionAbility](../reference/apis-backgroundtasks-kit/js-apis-WorkSchedulerExtensionAbility.md)等。开发者通过使用不同类型的ExtensionAbility组件,可以扩展和丰富应用功能,更好地与其他应用或系统开展交互。 11 12不同类型ExtensionAbility组件均由系统定义,且通常由相应的系统服务统一管理(例如[InputMethodExtensionAbility](../reference/apis-ime-kit/js-apis-inputmethod-extension-ability.md)组件由输入法管理服务统一管理)。开发者不能直接继承ExtensionAbility组件,只能使用(包括实现或访问)已定义的[ExtensionAbility类型](../reference/apis-ability-kit/js-apis-bundleManager.md#extensionabilitytype)。 13 14## ExtensionAbility类型说明 15 16当前系统已定义的ExtensionAbility类型如下表所示。 17 18> **说明:** 19> 20> - “是否允许三方应用实现”是指:三方应用能否继承该类型ExtensionAbility实现自己的业务逻辑。 21> - “是否有独立Extension沙箱”是指:该类型ExtensionAbility的沙箱是否与主应用沙箱相对独立、不可互相访问。 22 23| ExtensionAbility类型 | 功能描述 | 是否允许三<br/>方应用实现 | 是否有独立<br/>Extension沙箱 | 24|--------------------------------------|---------|-------------------------------------------|-----------------------| 25| [FormExtensionAbility](../reference/apis-form-kit/js-apis-app-form-formExtensionAbility.md) | 卡片扩展能力,用于提供[服务卡片](../form/formkit-overview.md)的相关能力。| 是 | 否 | 26| [WorkSchedulerExtensionAbility](../reference/apis-backgroundtasks-kit/js-apis-WorkSchedulerExtensionAbility.md) | 延时任务扩展能力,用于提供[延迟任务](../task-management/work-scheduler.md)的相关能力。 | 是 | 否 | 27| [InputMethodExtensionAbility](../reference/apis-ime-kit/js-apis-inputmethod-extension-ability.md) | 输入法扩展能力,用于实现[输入法应用](../inputmethod/ime-kit-intro.md)的开发。 | 是 | 是 | 28| <!--Del-->[<!--DelEnd-->ServiceExtensionAbility<!--Del-->](../reference/apis-ability-kit/js-apis-app-ability-serviceExtensionAbility-sys.md)<!--DelEnd-->| 后台服务扩展能力,提供后台运行并对外提供相应能力。<br/>三方应用可以连接该ExtensionAbility,并进行通信。 |否| 否 | 29| [AccessibilityExtensionAbility](../reference/apis-accessibility-kit/js-apis-application-accessibilityExtensionAbility.md)|无障碍服务扩展能力,支持访问与操作前台界面。| 是| 否 | 30| <!--Del-->[<!--DelEnd-->DataShareExtensionAbility<!--Del-->](../reference/apis-arkdata/js-apis-application-dataShareExtensionAbility-sys.md)<!--DelEnd-->| 数据共享扩展能力,用于对外提供数据读写服务。<br/>三方应用可以连接该ExtensionAbility,进行数据读写。| 否| 否 | 31|<!--DelRow-->[StaticSubscriberExtensionAbility](../reference/apis-basic-services-kit/js-apis-application-staticSubscriberExtensionAbility-sys.md)|静态广播扩展能力,用于处理静态事件,比如开机事件。三方应用无法访问。|否| 否 | 32|<!--DelRow-->[WallpaperExtensionAbility](../reference/apis-basic-services-kit/js-apis-WallpaperExtensionAbility-sys.md)|壁纸扩展能力,用于实现桌面壁纸。三方应用无法访问。|否| 否 | 33| [BackupExtensionAbility](../reference/apis-core-file-kit/js-apis-application-backupExtensionAbility.md) | 数据备份扩展能力,用于提供[备份及恢复应用数据](../file-management/app-file-backup-overview.md)的能力。 | 是 | 否 | 34|<!--DelRow-->[WindowExtensionAbility](../reference/apis-arkui/js-apis-application-windowExtensionAbility-sys.md)|界面组合扩展能力,允许系统应用进行跨应用的界面拉起和嵌入。三方应用无法访问。| 否| 否 | 35| [EnterpriseAdminExtensionAbility](../reference/apis-mdm-kit/js-apis-EnterpriseAdminExtensionAbility.md)|[企业设备管理扩展能力](../mdm/mdm-kit-admin.md),提供企业管理时处理管理事件的能力,<br/>比如设备上应用安装事件、锁屏密码输入错误次数过多事件等。|是| 否 | 36| [PrintExtensionAbility](../reference/apis-basic-services-kit/js-apis-app-ability-PrintExtensionAbility.md)|文件打印扩展能力,提供应用打印照片、文档等办公场景。|是| 否 | 37| [ShareExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-shareExtensionAbility.md) | 分享扩展组件,用于提供分享模板服务扩展的能力。 | 是 | 否 | 38| [DriverExtensionAbility](../reference/apis-driverdevelopment-kit/js-apis-app-ability-driverExtensionAbility.md) | 驱动扩展能力,用于提供[驱动相关扩展框架](../device/driver/driverextensionability.md)。 | 是 | 否 | 39| [ActionExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-actionExtensionAbility.md)| 自定义服务扩展能力,为开发者提供基于UIExtension的自定义操作业务模板。|是| 否 | 40| <!--RP3-->[AdsServiceExtensionAbility](../reference/apis-ads-kit/js-apis-adsserviceextensionability.md)<!--RP3End-->| 广告服务扩展能力,对外提供后台自定义广告业务服务。|是| 否 | 41| [EmbeddedUIExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-embeddedUIExtensionAbility.md) | 嵌入式UI扩展能力,提供[跨进程界面嵌入](embeddeduiextensionability.md)的能力。 | 是 | 否 | 42| [FenceExtensionAbility](../reference/apis-location-kit/js-apis-app-ability-FenceExtensionAbility.md) | 地理围栏扩展能力,用于提供<!--RP1-->[地理围栏](../device/location/fenceExtensionAbility.md)<!--RP1End-->扩展的能力。 | 是 | 否 | 43| [DistributedExtensionAbility](../reference/apis-distributedservice-kit/js-apis-distributedExtensionAbility.md)|分布式扩展能力,提供分布式创建、销毁、连接的生命周期回调。|是| 否 | 44| [AppServiceExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-appServiceExtensionAbility.md) | 应用后台服务扩展能力,提供应用后台服务的创建、销毁、连接、断开等生命周期回调。 | 是 | 否 | 45|<!--DelRow-->[SelectionExtensionAbility](../reference/apis-basic-services-kit/js-apis-selectionInput-selectionExtensionAbility-sys.md) | 划词扩展能力,提供系统应用后台服务的连接和断开等生命周期回调。三方应用无法访问。 | 否 | 否 | 46<!--RP2--><!--RP2End--> 47 48> **说明:** 49> 50> 通常情况下,应用中(同一Bundle名称)所有同一类型的ExtensionAbility均运行在同一个独立进程。以下为例外场景: 51> 52> - ServiceExtensionAbility(仅系统应用涉及)、DataShareExtensionAbility(仅系统应用涉及)与所有UIAbility均运行在同一个独立进程(主进程)。 53> - UIExtensionAbility以及继承该类型的ExtensionAbility可以通过module.json5配置文件中的[extensionProcessMode](../quick-start/module-configuration-file.md#extensionabilities标签)字段,配置进程运行模式。 54 55## 访问指定类型的ExtensionAbility组件 56 57所有类型的[ExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-extensionAbility.md)组件均不能被应用直接启动,而是由相应的系统管理服务拉起,以确保其生命周期受系统管控,使用时拉起,使用完销毁。ExtensionAbility组件的调用方无需关心目标ExtensionAbility组件的生命周期。 58 59 以[InputMethodExtensionAbility](../reference/apis-ime-kit/js-apis-inputmethod-extension-ability.md)组件为例进行说明,如下图所示,调用方应用发起对InputMethodExtensionAbility组件的调用,此时将先调用输入法管理服务,由输入法管理服务拉起InputMethodExtensionAbility组件,返回给调用方,同时开始管理其生命周期。 60 61**图1** 使用InputMethodExtensionAbility组件 62 63 64 65 66## 实现指定类型的ExtensionAbility组件 67 68以实现卡片[FormExtensionAbility](../reference/apis-form-kit/js-apis-app-form-formExtensionAbility.md)为例进行说明。卡片框架提供了FormExtensionAbility基类,开发者通过派生此基类(如MyFormExtensionAbility),实现回调(如创建卡片的onCreate()回调、更新卡片的[onUpdateForm()](../reference/apis-form-kit/js-apis-app-form-formExtensionAbility.md#formextensionabilityonupdateform)回调等)来实现具体卡片功能,具体见开发指导见[服务卡片](../form/formkit-overview.md)。 69 70卡片FormExtensionAbility实现方不用关心使用方何时去请求添加、删除卡片,FormExtensionAbility实例及其所在的[ExtensionAbility](../reference/apis-ability-kit/js-apis-app-ability-extensionAbility.md)进程的整个生命周期,都是由卡片管理系统服务FormManagerService进行调度管理。 71 72