1# UIAbility Usage 2 3 4When using the [UIAbility](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md) component, you must specify a startup page and obtain the context, [UIAbilityContext](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md). 5 6 7## Specifying the Startup Page of UIAbility 8 9If no startup page is specified, a white screen occurs after the application is started. You can use [loadContent()](../reference/apis-arkui/js-apis-window.md#loadcontent9) of [WindowStage](../reference/apis-arkui/js-apis-window.md#windowstage9) to set the startup page in the [onWindowStageCreate()](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md#uiabilityonwindowstagecreate) callback of the [UIAbility](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md) instance. 10 11 12```ts 13import { UIAbility } from '@kit.AbilityKit'; 14import { window } from '@kit.ArkUI'; 15 16export default class EntryAbility extends UIAbility { 17 onWindowStageCreate(windowStage: window.WindowStage): void { 18 // Main window is created. Set a main page for this ability. 19 windowStage.loadContent('pages/Index', (err, data) => { 20 // ... 21 }); 22 } 23 // ... 24} 25``` 26 27> **NOTE** 28> 29> When you create UIAbility in DevEco Studio, the UIAbility instance loads the **Index** page as its startup page. Therefore, you only need to replace the **Index** page path with the required startup page path. 30 31 32## Obtaining the Context of UIAbility 33 34The [UIAbility](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md) class has its own context, which is an instance of the [UIAbilityContext](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) class. The [UIAbilityContext](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) class has attributes such as **abilityInfo** and **currentHapModuleInfo**. UIAbilityContext can be used to obtain the UIAbility configuration information, such as the code path, bundle name, ability name, and environment status required by the application. It can also be used to obtain methods to operate the UIAbility instance, such as [startAbility()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability), [connectServiceExtensionAbility()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextconnectserviceextensionability), and [terminateSelf()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself). 35 36The [getContext](../reference/apis-arkui/js-apis-getContext.md#getcontext) API enables you to obtain the context of the ability (either UIAbilityContext or [ExtensionContext](../reference/apis-ability-kit/js-apis-inner-application-extensionContext.md)) on the current page. 37 38- You can use **this.context** to obtain the context of a UIAbility instance. 39 40 ```ts 41 import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit'; 42 43 export default class EntryAbility extends UIAbility { 44 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 45 // Obtain the context of the UIAbility instance. 46 let context = this.context; 47 // ... 48 } 49 } 50 ``` 51 52- Import the context module and define the **context** variable in the component. 53 54 ```ts 55 import { common, Want } from '@kit.AbilityKit'; 56 57 @Entry 58 @Component 59 struct Page_EventHub { 60 private context = getContext(this) as common.UIAbilityContext; 61 62 startAbilityTest(): void { 63 let want: Want = { 64 // Want parameter information. 65 }; 66 this.context.startAbility(want); 67 } 68 69 // Page display. 70 build() { 71 // ... 72 } 73 } 74 ``` 75 76 You can also define variables after importing the context module but before using [UIAbilityContext](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md). 77 78 79 ```ts 80 import { common, Want } from '@kit.AbilityKit'; 81 82 @Entry 83 @Component 84 struct Page_UIAbilityComponentsBasicUsage { 85 startAbilityTest(): void { 86 let context = getContext(this) as common.UIAbilityContext; 87 let want: Want = { 88 // Want parameter information. 89 }; 90 context.startAbility(want); 91 } 92 93 // Page display. 94 build() { 95 // ... 96 } 97 } 98 ``` 99 100- To stop the [UIAbility](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md) instance after the service is not needed, call [terminateSelf()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself). 101 102 ```ts 103 import { common } from '@kit.AbilityKit'; 104 import { BusinessError } from '@kit.BasicServicesKit'; 105 106 @Entry 107 @Component 108 struct Page_UIAbilityComponentsBasicUsage { 109 // Page display. 110 build() { 111 Column() { 112 //... 113 Button('FuncAbilityB') 114 .onClick(() => { 115 let context = getContext(this) as common.UIAbilityContext; 116 try { 117 context.terminateSelf((err: BusinessError) => { 118 if (err.code) { 119 // Process service logic errors. 120 console.error(`terminateSelf failed, code is ${err.code}, message is ${err.message}`); 121 return; 122 } 123 // Carry out normal service processing. 124 console.info('terminateSelf succeed'); 125 }); 126 } catch (err) { 127 // Capture the synchronization parameter error. 128 let code = (err as BusinessError).code; 129 let message = (err as BusinessError).message; 130 console.error(`terminateSelf failed, code is ${code}, message is ${message}`); 131 } 132 }) 133 } 134 } 135 } 136 ``` 137