1# Component Startup Rules (Stage Model)
2
3
4Component startup refers to the behavior of starting or connecting to an application component.
5
6
7- Start the [UIAbility](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md), ServiceExtensionAbility, and DataShareExtensionAbility components. For example, you can use [startAbility()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability), **startServiceExtensionAbility()**, [startAbilityByCall()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall), and [openLink()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextopenlink12).
8
9- Connect to the ServiceExtensionAbility and DataShareExtensionAbility components. For example, you can use [connectServiceExtensionAbility()](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextconnectserviceextensionability) and **createDataShareHelper()**.
10
11## General Component Startup Rules
12
13To deliver a better user experience, the system restricts the following behavior:
14
15
16- A background application randomly displays a dialog box, such as an ads pop-up.
17
18- Background applications wake up each other. This type of behavior occupies system resources and increases power consumption, or even causes system frozen.
19
20- A foreground application randomly redirects to another application, for example, redirecting to the payment page of another application. This type of behavior poses security risks.
21
22
23In view of this, the system formulates a set of component startup rules, as follows:
24
25- Before starting a component of another application, check whether the component can be called by others.
26
27  If the **exported** field of the component is set to **true**, the component can be called by other applications. If the field is set to **false**, the component cannot be called by other applications. If this is the case, you must also verify the permission **ohos.permission.START_INVISIBLE_ABILITY**, which is available only for system applications. For details about the **exported** fields, see [abilities](../quick-start/module-configuration-file.md#abilities).
28
29- Before starting a UIAbility component of a background application, verify the permission **ohos.permission.START_ABILITIES_FROM_BACKGROUND**, which is available only for system applications.
30
31  > **NOTE**
32  >
33  > An application is considered as a foreground application only when the application process gains focus or its UIAbility component is running in the foreground.
34
35- Before using **startAbilityByCall()** to start a component running on another device, verify the permission **ohos.permission.DISTRIBUTED_DATASYNC**.
36
37The preceding component startup rules take effect since API version 9. Familiarity with these rules helps you prevent service exceptions.
38
39
40
41## Intra-Device Component Startup Rules
42
43  The rules for starting components on the same device vary in the following scenarios:
44
45- Starting the UIAbility component
46
47- Starting the ServiceExtensionAbility and DataShareExtensionAbility components
48
49- Using [startAbilityByCall](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall) to start the UIAbility component
50
51![startup-rule](figures/component-startup-inner-stage.png)
52
53
54## Inter-Device Component Startup Rules
55
56  The rules for starting components on a different device vary in the following scenarios:
57
58- Starting the UIAbility component
59
60- Starting the ServiceExtensionAbility and DataShareExtensionAbility components
61
62- Using [startAbilityByCall](../reference/apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall) to start the UIAbility component
63
64![component-startup-rules](figures/component-startup-inter-stage.png)
65