1# Ability Management Framework<a name="EN-US_TOPIC_0000001062157546"></a> 2 3- [Introduction](#section11660541593) 4- [Directory Structure](#section1464106163817) 5- [Usage](#section1954314201620) 6- [Repositories Involved](#section93061357133720) 7 8## Introduction<a name="section11660541593"></a> 9 10The ability management framework is provided by OpenHarmony for you to develop OpenHarmony applications. The following figure shows the architecture of the ability management framework. 11 12**Figure 1** Ability management framework 13 14 15 16- **AbilityKit** is a development kit provided by the ability management framework. You can use this kit to develop applications based on the **Ability** component. There are two types of applications developed based on the **Ability** component: **JS Ability** developed using the JavaScript language and **Native Ability** developed using the C/C++ language. The **JS application development framework** encapsulates JavaScript UI components on the basis of the AbilityKit and is used to help you quickly develop JS Ability-based applications. 17- **Ability** is the minimum unit for the system to schedule applications. It is a component that can implement an independent functionality. An application can contain one or more **Ability** instances. There are two types of templates that you can use to create an **Ability** instance: Page and Service. 18 - An **Ability using the Page template** \(Page ability for short\) provides a UI for interacting with users. 19 - An **Ability using the Service template** \(Service ability for short\) does not have a UI and is used for running background tasks. 20 21- An **AbilitySlice** represents a single screen and its control logic. It is specific to Page abilities. A Page ability may contain one ability slice or multiple ability slices that provide highly relevant capabilities. The following figure shows the relationship between a Page ability and its ability slices. 22 23**Figure 2** Relationship between a Page ability and its ability slices 24 25 26 27- **Lifecycle** is a general term for all states of an ability, including **UNINITIALIZED**, **INITIAL**, **INACTIVE**, **ACTIVE**, and **BACKGROUND**. The following figure shows the lifecycle state transition of an ability. 28 29**Figure 3** Lifecycle state transition of a Page ability 30 31 32 33- Description of ability lifecycle states: 34 - **UNINITIALIZED**: The ability is not initialized. This state is a temporary state. An ability changes directly to the **INITIAL** state upon its creation. 35 36 - **INITIAL**: This state refers to the initial or stopped state. The ability in this state is not running. The ability enters the **INACTIVE** state after it is started. 37 38 - **INACTIVE**: The ability is visible but does not gain focus. 39 40 - **ACTIVE**: The ability is in the foreground and has focus. The ability changes from the **ACTIVE** state to the **INACTIVE** state before returning to the background. 41 42 - **BACKGROUND**: The ability returns to the background. After being re-activated, the ability enters the **ACTIVE** state. After being destroyed, the ability enters the **INITIAL** state. 43 44- **AbilityLoader** is used to register and load **Ability** classes. After creating an **Ability** class, you should first call the registration API defined in **AbilityLoader** to register the **Ability** class name with the ability management framework so that this **Ability** can be instantiated when being started. 45- **AbilityManager** enables inter-process communication \(IPC\) between the AbilityKit and the Ability Manager Service. 46- **EventHandler** is provided by the AbilityKit to enable inter-thread communication between abilities. 47- The **Ability Manager Service** is a system service used to coordinate the running relationships and lifecycle states of **Ability** instances. It consists of the following sub-modules: 48 - The **service startup** sub-module starts and registers the Ability Manager Service. 49 - The **service interface management** sub-module manages external capabilities provided by the Ability Manager Service. 50 - The **process management** sub-module starts and destroys processes where **Ability** instances are running, and maintains the process information. 51 - The **ability stack management** sub-module maintains the presentation sequence of abilities in the stack. 52 - The **lifecycle scheduling** sub-module changes an ability to a particular state based on the current operation of the system. 53 - The **connection management** sub-module manages connections to Service abilities. 54 55- **AppSpawn** is a system service used to create the process for running an ability. This service has high permissions. It sets permissions for **Ability** instances and pre-loads some common modules to accelerate application startup. 56 57## Directory Structure<a name="section1464106163817"></a> 58 59``` 60/foundation/ability/ability_lite 61 ├── frameworks 62 │ ├── ability_lite # Core implementation code of AbilityKit 63 │ ├── abilitymgr_lite # Client code used for communication between the AbilityKit and Ability Manager Service 64 │ └── want_lite # Implementation code of the information carrier for interaction between abilities 65 ├── interfaces 66 │ ├── kits 67 │ │ ├── ability_lite # AbilityKit APIs exposed externally 68 │ │ └── want_lite # External APIs of the information carrier for interaction between abilities 69 │ └── inner_api 70 │ └── abilitymgr_lite # Internal APIs provided by the Ability Manager Service for other subsystems 71 └── services 72 └── abilitymgr_lite # Implementation code of the Ability Manager Service 73``` 74 75## Usage<a name="section1954314201620"></a> 76 77- The Ability Manager Service is running in the foundation process. 78- The Ability Manager Service is registered with **sa\_manager**. **sa\_manager** runs in the foundation process and sets up a thread runtime environment for the service. For details about how to create and use the Ability Manager Service, see SA Framework. 79- The Ability Manager Service starts upon OS startup. 80 81- After the HAP installation is complete, you can use the aa tool to run the demo for starting the specified ability through the following command. \(Taking **hispark\_taurus** as an example, you can obtain the aa tool from the **out/hispark\_taurus/ipcamera\_hispark\_taurus/dev\_tools/bin** directory after the version building.\) 82 83``` 84./bin/aa start -p com.xxxxxx.hiability -n MainAbility 85``` 86 87## Repositories Involved<a name="section93061357133720"></a> 88 89[Ability framework](https://gitee.com/openharmony/docs/blob/master/en/readme/ability.md) 90 91**aafwk\_aafwk\_lite** 92 93[appexecfwk\_appexecfwk\_lite](https://gitee.com/openharmony/appexecfwk_appexecfwk_lite/blob/master/README.md) 94 95