# @ohos.app.ability.UIExtensionAbility (Base Class for ExtensionAbilities with UI)
UIExtensionAbility is a base class for ExtensionAbilities with UI in specific scenarios. It provides properties and APIs related to ExtensionAbilities with UI. It inherits from [ExtensionAbility](js-apis-app-ability-extensionAbility.md). You cannot inherit from this base class. For details about the inheritance relationship of each ability, see [Inheritance Relationship](./js-apis-app-ability-ability.md#ability-inheritance-relationship).
> **NOTE**
>
> The initial APIs of this module are supported since API version 10. Newly added APIs will be marked with a superscript to indicate their earliest API version.
>
> The APIs of this module can be used only in the stage model.
## Modules to Import
```ts
import { UIExtensionAbility } from '@kit.AbilityKit';
```
## UIExtensionAbility
Base class for ExtensionAbilities that has a UI, designed for specific scenarios. It introduces properties and methods associated with UIExtensionAbilities.
### Properties
**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
| Name| Type| Read-only| Optional| Description|
| -------- | -------- | -------- | -------- | -------- |
| context | [UIExtensionContext](js-apis-inner-application-uiExtensionContext.md) | No| No| Context of the UIExtensionAbility.|
### onCreate
onCreate(launchParam: AbilityConstant.LaunchParam): void
Called to initialize the service logic when a UIExtensionAbility is being created.
**System capability**: SystemCapability.Ability.AbilityRuntime.Core
**Parameters**
| Name| Type| Mandatory| Description|
| -------- | -------- | -------- | -------- |
| launchParam12+ | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#launchparam) | Yes| Parameters for starting the UIExtensionAbility, and the reason for the last abnormal exit.|
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility, AbilityConstant } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onCreate(launchParam: AbilityConstant.LaunchParam) {
console.info(TAG, `onCreate, launchParam: ${JSON.stringify(launchParam)}`);
}
}
```
### onSessionCreate
onSessionCreate(want: Want, session: UIExtensionContentSession): void
Called when a UIExtensionContentSession instance is created for this UIExtensionAbility.
**System capability**: SystemCapability.Ability.AbilityRuntime.Core
**Parameters**
| Name| Type| Mandatory| Description|
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-app-ability-want.md) | Yes| Want information related to this UIExtensionAbility, including the ability name and bundle name.|
| session | [UIExtensionContentSession](js-apis-app-ability-uiExtensionContentSession.md) | Yes| UI content information related to this UIExtensionAbility.|
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility, UIExtensionContentSession, Want } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onSessionCreate(want: Want, session: UIExtensionContentSession) {
console.info(TAG, `onSessionCreate, want: ${JSON.stringify(want)}`);
}
}
```
### onSessionDestroy
onSessionDestroy(session: UIExtensionContentSession): void
Called when a UIExtensionContentSession instance is destroyed for this UIExtensionAbility.
**System capability**: SystemCapability.Ability.AbilityRuntime.Core
**Parameters**
| Name| Type| Mandatory| Description|
| -------- | -------- | -------- | -------- |
| session | [UIExtensionContentSession](js-apis-app-ability-uiExtensionContentSession.md) | Yes| UI content information related to this UIExtensionAbility.|
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility, UIExtensionContentSession } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onSessionDestroy(session: UIExtensionContentSession) {
console.info(TAG, `onSessionDestroy`);
}
}
```
### onForeground
onForeground(): void
Called when this UIExtensionAbility is switched from the background to the foreground.
**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onForeground() {
console.info(TAG, `onForeground`);
}
}
```
### onBackground
onBackground(): void
Called when this UIExtensionAbility is switched from the foreground to the background.
**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onBackground() {
console.info(TAG, `onBackground`);
}
}
```
### onDestroy
onDestroy(): void | Promise<void>
Called to clear resources when this UIExtensionAbility is destroyed.
After the **onDestroy()** lifecycle callback is executed, the application may exit. Consequently, the asynchronous function (for example, asynchronously writing data to the database) in **onDestroy()** may fail to be executed. You can use the asynchronous lifecycle to ensure that the subsequent lifecycle continues only after the asynchronous function in **onDestroy()** finishes the execution.
**System capability**: SystemCapability.Ability.AbilityRuntime.Core
**Returns**
| Type | Description |
| ----------------- | ------------------------------------------------------------ |
| void \| Promise\ | No return value or a Promise object that returns no value. |
**Example**
```ts
// The UIExtensionAbility class does not allow direct inheritance by third-party applications. The child class ShareExtensionAbility is used here as an example.
import { ShareExtensionAbility } from '@kit.AbilityKit';
const TAG: string = '[testTag] ShareExtAbility';
export default class ShareExtAbility extends ShareExtensionAbility {
onDestroy() {
console.info(TAG, `onDestroy`);
}
}
```