From 0a34660458649b7a605edca2ac37127e0d4f9095 Mon Sep 17 00:00:00 2001 From: shawn_he Date: Wed, 28 Dec 2022 14:39:52 +0800 Subject: [PATCH] update doc Signed-off-by: shawn_he --- en/application-dev/dfx/Readme-EN.md | 1 + .../dfx/apprecovery-guidelines.md | 193 ++++++++++++++++++ .../dfx/figures/fault_rectification.png | Bin 0 -> 60074 bytes .../reference/apis/js-apis-cooperate.md | 30 +-- .../reference/apis/js-apis-inputdevice.md | 116 +++++------ .../reference/apis/js-apis-pointer.md | 8 + 6 files changed, 276 insertions(+), 72 deletions(-) create mode 100644 en/application-dev/dfx/apprecovery-guidelines.md create mode 100644 en/application-dev/dfx/figures/fault_rectification.png diff --git a/en/application-dev/dfx/Readme-EN.md b/en/application-dev/dfx/Readme-EN.md index b8c6422a63..af9e5d190a 100644 --- a/en/application-dev/dfx/Readme-EN.md +++ b/en/application-dev/dfx/Readme-EN.md @@ -11,3 +11,4 @@ - [Development of Distributed Call Chain Tracing](hitracechain-guidelines.md) - Error Management - [Development of Error Manager](errormanager-guidelines.md) + - [Development of Application Recovery](apprecovery-guidelines.md) diff --git a/en/application-dev/dfx/apprecovery-guidelines.md b/en/application-dev/dfx/apprecovery-guidelines.md new file mode 100644 index 0000000000..1a3f3577b0 --- /dev/null +++ b/en/application-dev/dfx/apprecovery-guidelines.md @@ -0,0 +1,193 @@ +# Development of Application Recovery + +## When to Use + +During application running, some unexpected behaviors are inevitable. For example, unprocessed exceptions and errors are thrown, and the call or running constraints of the framework are violated. + +By default, the processes will exit as exception handling. However, if user data is generated during application use, process exits may interrupt user operations and cause data loss. +In this way, application recovery APIs may help you save temporary data, restart an application after it exits, and restore its status and data, which deliver a better user experience. + +Currently, the APIs support only the development of an application that adopts the stage model, single process, and single ability. + +## Available APIs + +The application recovery APIs are provided by the **appRecovery** module, which can be imported via **import**. For details, please refer to [Development Example](#Development Example). This document describes behaviors of APIs in API version 9, and the content will update with changes. + +### Available APIs + +| API | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| enableAppRecovery(restart?: RestartFlag, saveOccasion?: SaveOccasionFlag, saveMode?: SaveModeFlag) : void; | Enables the application recovery function. | +| saveAppState(): boolean; | Saves the ability status of an application. | +| restartApp(): void; | Restarts the current process. If there is saved ability status, it will be passed to the **want** parameter's **wantParam** attribute of the **onCreate** lifecycle callback of the ability.| + +The APIs are used for troubleshooting and do not return any exception. Therefore, you need to be familiar with when they are used. + +**enableAppRecovery**: This API should be called during application initialization. For example, you can call this API in **onCreate** of **AbilityStage**. For details, please refer to the [parameter description](../reference/apis/js-apis-app-ability-appRecovery.md). + +**saveAppState**: After this API is called, the framework calls back **onSaveState** of the ability. If data saving is agreed to in this method, relevant data and the page stack of the ability are persisted to the local cache of the application. + +**restartApp**: After this API is called, the framework kills the current application process and restarts the ability in the foreground, with **APP_RECOVERY** specified as the startup cause. + +### Framework Fault Management Process + +Fault management is an important way for applications to deliver a better user experience. The application framework offers three methods for application fault management: fault listening, fault rectification, and fault query. + +- Fault listening refers to the process of registering [ErrorObserver](../reference/apis/js-apis-application-errorManager.md#errorobserver) via [errorManager](../reference/apis/js-apis-application-errorManager.md), listening for fault occurrence, and notifying the fault listener. + +- Fault rectification refers to [appRecovery](../reference/apis/js-apis-app-ability-appRecovery.md) and restarts an application to restore its status previous to a fault. + +- Fault query indicates that [faultLogger](../reference/apis/js-apis-faultLogger.md) obtains the fault information using its query API. + +The figure below does not illustrate the time when [faultLogger](../reference/apis/js-apis-faultLogger.md) is called. You can refer to [LastExitReason](../reference/apis/js-apis-application-abilityConstant.md#abilityconstantlastexitreason) passed during application initialization to determine whether to call [faultLogger](../reference/apis/js-apis-faultLogger.md) to query the information about the last fault. +![Fault rectification process](./figures/fault_rectification.png) + +It is recommended that you call [errorManager](../reference/apis/js-apis-application-errorManager.md) to process the exception. After the processing is complete, you can call the status saving API and restart the application. +If you do not register [ErrorObserver](../reference/apis/js-apis-application-errorManager.md#errorobserver) or enable application recovery, the application process will exit according to the default processing logic of the system. Users can restart the application from the home screen. +If you have enabled application recovery, the framework first checks whether a fault allows for ability status saving and whether you have configured ability status saving. If so, [onSaveState](../reference/apis/js-apis-application-ability.md#abilityonsavestate) of [Ability](../reference/apis/js-apis-application-ability.md#ability) is called back. Finally, the application is restarted. + +### Scenarios Supported by Application Fault Management APIs + +Common fault types include JavaScript application crash, application freezing, and C++ application crash. Generally, an application is closed when a crash occurs. Application freezing occurs when the application does not respond. The fault type can be ignored for the upper layer of an application. The recovery framework implements fault management in different scenarios based on the fault type. + +| Fault | Fault Listening| Status Saving| Automatic Restart| Log Query| +| ------------------------------------------------------------ | -------- | -------- | -------- | -------- | +| [JS_CRASH](../reference/apis/js-apis-faultLogger.md#faulttype) | Supported | Supported | Supported | Supported | +| [APP_FREEZE](../reference/apis/js-apis-faultLogger.md#faulttype) | Not supported | Not supported | Supported | Supported | +| [CPP_CRASH](../reference/apis/js-apis-faultLogger.md#faulttype) | Not supported | Not supported | Not supported | Supported | + +**Status Saving** in the table header means status saving when a fault occurs. To protect user data as much as possible in the application freezing fault, you can adopt either the periodic or automatic way, and the latter will save user data when an ability is switched to the background. + + + +## Development Example + +### Enabling Application Recovery + + Enable **appRecovery** during application initialization. The following is an example of **AbilityStage**: + +```ts +import AbilityStage from '@ohos.app.ability.AbilityStage' +import appRecovery from '@ohos.app.ability.appRecovery' + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.info("[Demo] MyAbilityStage onCreate") + appRecovery.enableAppRecovery(appRecovery.RestartFlag.ALWAYS_RESTART, + appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR | appRecovery.SaveOccasionFlag.SAVE_WHEN_BACKGROUND, + appRecovery.SaveModeFlag.SAVE_WITH_FILE); + } +} +``` + +### Saving and Restoring Data + +After enabling **appRecovery**, you can use this function by either actively or passively saving the status and restoring data in the ability. +The following is an example of **MainAbility**: + +#### Importing the Service Package + +```ts +import errorManager from '@ohos.app.ability.errorManager' +import appRecovery from '@ohos.app.ability.appRecovery' +import AbilityConstant from '@ohos.app.ability.AbilityConstant' +``` + +#### Actively Saving Status and Restoring Data + +- Define and register the [ErrorObserver](../reference/apis/js-apis-application-errorManager.md#errorobserver) callback. + +```ts + var registerId = -1; + var callback = { + onUnhandledException: function (errMsg) { + console.log(errMsg); + appRecovery.saveAppState(); + appRecovery.restartApp(); + } + } + + onWindowStageCreate(windowStage) { + // Main window is created. Set a main page for this ability. + console.log("[Demo] MainAbility onWindowStageCreate") + + globalThis.registerObserver = (() => { + registerId = errorManager.registerErrorObserver(callback); + }) + + windowStage.loadContent("pages/index", null); + } +``` + +- Save data. + +After the callback triggers **appRecovery.saveAppState()**, **onSaveState(state, wantParams)** of **MainAbility** is triggered. + +```ts + onSaveState(state, wantParams) { + // Save application data. + console.log("[Demo] MainAbility onSaveState") + wantParams["myData"] = "my1234567"; + return AbilityConstant.onSaveResult.ALL_AGREE; + } +``` + +- Restore data. + +After the callback triggers **appRecovery.restartApp()**, the application is restarted. After the restart, **onSaveState(state, wantParams)** of **MainAbility** is called, and the saved data is in **parameters** of **want**. + +```ts +storage: LocalStorage +onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + if (launchParam.launchReason == AbilityConstant.LaunchReason.APP_RECOVERY) { + this.storage = new LocalStorage(); + let recoveryData = want.parameters["myData"]; + this.storage.setOrCreate("myData", recoveryData); + this.context.restoreWindowStage(this.storage); + } +} +``` + +- Deregister **ErrorObserver callback**. + +```ts +onWindowStageDestroy() { + // Main window is destroyed to release UI resources. + console.log("[Demo] MainAbility onWindowStageDestroy") + + globalThis.unRegisterObserver = (() => { + errorManager.unregisterErrorObserver(registerId, (result) => { + console.log("[Demo] result " + result.code + ";" + result.message) + }); + }) +} +``` + +#### Passively Saving Status and Restoring Data + +This is triggered by the recovery framework. You do not need to register **ErrorObserver callback**. You only need to implement **onSaveState** of the ability for status saving and **onCreate** of the ability for data restoration. + +```ts +export default class MainAbility extends Ability { + storage: LocalStorage + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + if (launchParam.launchReason == AbilityConstant.LaunchReason.APP_RECOVERY) { + this.storage = new LocalStorage(); + let recoveryData = want.parameters["myData"]; + this.storage.setOrCreate("myData", recoveryData); + this.context.restoreWindowStage(this.storage); + } + } + + onSaveState(state, wantParams) { + // Save application data. + console.log("[Demo] MainAbility onSaveState") + wantParams["myData"] = "my1234567"; + return AbilityConstant.onSaveResult.ALL_AGREE; + } +} +``` diff --git a/en/application-dev/dfx/figures/fault_rectification.png b/en/application-dev/dfx/figures/fault_rectification.png new file mode 100644 index 0000000000000000000000000000000000000000..63ac5e5f666d5c23c9e9ea3123a9566013336aba GIT binary patch literal 60074 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

h^cK=TbCA%X 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 P!(Ezcx~kRBUcCQ5yKC*` literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/apis/js-apis-cooperate.md b/en/application-dev/reference/apis/js-apis-cooperate.md index 6a90edc0c7..92a153e5eb 100644 --- a/en/application-dev/reference/apis/js-apis-cooperate.md +++ b/en/application-dev/reference/apis/js-apis-cooperate.md @@ -2,9 +2,11 @@ The Screen Hopping module enables two or more networked devices to share the keyboard and mouse for collaborative operations. -> **Description** +> **NOTE** > -> The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. +> - The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. +> - The APIs provided by this module are system APIs. + ## Modules to Import @@ -18,7 +20,7 @@ enable(enable: boolean, callback: AsyncCallback<void>): void Specifies whether to enable screen hopping. This API uses an asynchronous callback to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -52,7 +54,7 @@ enable(enable: boolean): Promise<void> Specifies whether to enable screen hopping. This API uses a promise to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -90,7 +92,7 @@ start(sinkDeviceDescriptor: string, srcInputDeviceId: number, callback: AsyncCal Starts screen hopping. This API uses an asynchronous callback to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -133,7 +135,7 @@ start(sinkDeviceDescriptor: string, srcInputDeviceId: number): Promise\ Starts screen hopping. This API uses a promise to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -181,7 +183,7 @@ stop(callback: AsyncCallback\): void Stops screen hopping. This API uses an asynchronous callback to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -213,9 +215,9 @@ stop(): Promise\ Stops screen hopping. This API uses a promise to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate -**Parameters** +**Return value** | Name | Description | | -------- | ---------------------------- | @@ -241,7 +243,7 @@ getState(deviceDescriptor: string, callback: AsyncCallback<{ state: boolean }>): Checks whether screen hopping is enabled. This API uses an asynchronous callback to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -273,7 +275,7 @@ getState(deviceDescriptor: string): Promise<{ state: boolean }> Checks whether screen hopping is enabled. This API uses a promise to return the result. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -311,7 +313,7 @@ on(type: 'cooperation', callback: AsyncCallback<{ deviceDescriptor: string, even Enables listening for screen hopping events. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -340,7 +342,7 @@ off(type: 'cooperation', callback?: AsyncCallback\): void Disables listening for screen hopping events. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate **Parameters** @@ -384,7 +386,7 @@ try { Enumerates screen hopping event. -**System capability**: SystemCapability.MultimodalInput.Input.InputDeviceCooperate +**System capability**: SystemCapability.MultimodalInput.Input.Cooperate | Name | Value | Description | | -------- | --------- | ----------------- | diff --git a/en/application-dev/reference/apis/js-apis-inputdevice.md b/en/application-dev/reference/apis/js-apis-inputdevice.md index 5b8764a13f..e1fff14e45 100644 --- a/en/application-dev/reference/apis/js-apis-inputdevice.md +++ b/en/application-dev/reference/apis/js-apis-inputdevice.md @@ -460,10 +460,10 @@ Defines the listener for hot swap events of an input device. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| -------- | ------------------------- | --------------------------------- | -| type | [ChangedType](#changedtype) | Device change type, which indicates whether an input device is inserted or removed. | -| deviceId | number | Unique ID of the input device. If the same physical device is repeatedly inserted and removed, its ID changes.| +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| type | [ChangedType](#changedtype) | Yes| No| Device change type, which indicates whether an input device is inserted or removed.| +| deviceId | number | Yes| No| Unique ID of the input device. If the same physical device is repeatedly inserted and removed, its ID changes.| ## InputDeviceData @@ -471,18 +471,18 @@ Defines the information about an input device. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| -------------------- | -------------------------------------- | ---------------------------------------- | -| id | number | Unique ID of the input device. If the same physical device is repeatedly inserted and removed, its ID changes. | -| name | string | Name of the input device. | -| sources | Array<[SourceType](#sourcetype)> | Source type of the input device. For example, if a keyboard is attached with a touchpad, the device has two input sources: keyboard and touchpad.| -| axisRanges | Array<[axisRanges](#axisrange)> | Axis information of the input device. | -| bus9+ | number | Bus type of the input device. | -| product9+ | number | Product information of the input device. | -| vendor9+ | number | Vendor information of the input device. | -| version9+ | number | Version information of the input device. | -| phys9+ | string | Physical address of the input device. | -| uniq9+ | string | Unique ID of the input device. | +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| id | number | Yes| No| Unique ID of the input device. If the same physical device is repeatedly inserted and removed, its ID changes.| +| name | string | Yes| No| Name of the input device. | +| sources | Array<[SourceType](#sourcetype)> | Yes| No| Source type of the input device. For example, if a keyboard is attached with a touchpad, the device has two input sources: keyboard and touchpad.| +| axisRanges | Array<[axisRanges](#axisrange)> | Yes| No| Axis information of the input device. | +| bus9+ | number | Yes| No| Bus type of the input device. | +| product9+ | number | Yes| No| Product information of the input device. | +| vendor9+ | number | Yes| No| Vendor information of the input device. | +| version9+ | number | Yes| No| Version information of the input device. | +| phys9+ | string | Yes| No| Physical address of the input device. | +| uniq9+ | string | Yes| No| Unique ID of the input device. | ## AxisType9+ @@ -490,17 +490,17 @@ Defines the axis type of an input device. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| ----------- | ------ | --------------- | -| touchMajor | string | touchMajor axis. | -| touchMinor | string | touchMinor axis. | -| toolMinor | string | toolMinor axis. | -| toolMajor | string | toolMajor axis. | -| orientation | string | Orientation axis.| -| pressure | string | Pressure axis. | -| x | string | X axis. | -| y | string | Y axis. | -| NULL | string | None. | +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| touchMajor | string | Yes| No| touchMajor axis. | +| touchMinor | string | Yes| No| touchMinor axis. | +| toolMinor | string | Yes| No| toolMinor axis. | +| toolMajor | string | Yes| No| toolMajor axis. | +| orientation | string | Yes| No| Orientation axis.| +| pressure | string | Yes| No| Pressure axis. | +| x | string | Yes| No| X axis. | +| y | string | Yes| No| Y axis. | +| NULL | string | Yes| No| None. | ## AxisRange @@ -508,41 +508,41 @@ Defines the axis range of an input device. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| ----------------------- | ------------------------- | -------- | -| source | [SourceType](#sourcetype) | Input source type of the axis.| -| axis | [AxisType](#axistype9) | Axis type. | -| max | number | Maximum value of the axis. | -| min | number | Minimum value of the axis. | -| fuzz9+ | number | Fuzzy value of the axis. | -| flat9+ | number | Benchmark value of the axis. | -| resolution9+ | number | Resolution of the axis. | +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| source | [SourceType](#sourcetype) | Yes| No| Input source type of the axis.| +| axis | [AxisType](#axistype9) | Yes| No| Axis type. | +| max | number | Yes| No| Maximum value of the axis. | +| min | number | Yes| No| Minimum value of the axis. | +| fuzz9+ | number | Yes| No| Fuzzy value of the axis. | +| flat9+ | number | Yes| No| Benchmark value of the axis. | +| resolution9+ | number | Yes| No| Resolution of the axis. | -## SourceType +## SourceType9+ Enumerates the input source types. For example, if a mouse reports an x-axis event, the source of the x-axis is the mouse. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| ----------- | ------ | ----------- | -| keyboard | string | The input device is a keyboard. | -| touchscreen | string | The input device is a touchscreen.| -| mouse | string | The input device is a mouse. | -| trackball | string | The input device is a trackball.| -| touchpad | string | The input device is a touchpad.| -| joystick | string | The input device is a joystick.| +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| keyboard | string | Yes| No| The input device is a keyboard. | +| touchscreen | string | Yes| No| The input device is a touchscreen.| +| mouse | string | Yes| No| The input device is a mouse. | +| trackball | string | Yes| No| The input device is a trackball.| +| touchpad | string | Yes| No| The input device is a touchpad.| +| joystick | string | Yes| No| The input device is a joystick.| -## ChangedType +## ChangedType9+ Defines the change type for the hot swap event of an input device. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Description | -| ------ | ------ | --------- | -| add | string | An input device is inserted.| -| remove | string | An input device is removed.| +| Name | Type | Readable | Writable | Description | +| --------- | ------ | ---- | ---- | ------- | +| add | string | Yes| No| An input device is inserted.| +| remove | string | Yes| No| An input device is removed.| ## KeyboardType9+ @@ -550,11 +550,11 @@ Enumerates the keyboard types. **System capability**: SystemCapability.MultimodalInput.Input.InputDevice -| Name | Type | Value | Description | -| ------------------- | ------ | ---- | --------- | -| NONE | number | 0 | Keyboard without keys. | -| UNKNOWN | number | 1 | Keyboard with unknown keys.| -| ALPHABETIC_KEYBOARD | number | 2 | Full keyboard. | -| DIGITAL_KEYBOARD | number | 3 | Keypad. | -| HANDWRITING_PEN | number | 4 | Stylus. | -| REMOTE_CONTROL | number | 5 | Remote control. | +| Name | Value | Description | +| ------------------- | ---- | --------- | +| NONE | 0 | Keyboard without keys. | +| UNKNOWN | 1 | Keyboard with unknown keys.| +| ALPHABETIC_KEYBOARD | 2 | Full keyboard. | +| DIGITAL_KEYBOARD | 3 | Keypad. | +| HANDWRITING_PEN | 4 | Stylus. | +| REMOTE_CONTROL | 5 | Remote control. | diff --git a/en/application-dev/reference/apis/js-apis-pointer.md b/en/application-dev/reference/apis/js-apis-pointer.md index ea2d452000..06bb32eecc 100644 --- a/en/application-dev/reference/apis/js-apis-pointer.md +++ b/en/application-dev/reference/apis/js-apis-pointer.md @@ -135,6 +135,8 @@ Sets the mouse movement speed. This API uses an asynchronous callback to return **System capability**: SystemCapability.MultimodalInput.Input.Pointer +**System API**: This is a system API. + **Parameters** | Name | Type | Mandatory | Description | @@ -166,6 +168,8 @@ Sets the mouse movement speed. This API uses a promise to return the result. **System capability**: SystemCapability.MultimodalInput.Input.Pointer +**System API**: This is a system API. + **Parameters** | Name | Type | Mandatory | Description | @@ -198,6 +202,8 @@ Obtains the mouse movement speed. This API uses an asynchronous callback to retu **System capability**: SystemCapability.MultimodalInput.Input.Pointer +**System API**: This is a system API. + **Parameters** | Name | Type | Mandatory | Description | @@ -254,6 +260,8 @@ Obtains the mouse pointer style. This API uses an asynchronous callback to retur **System capability**: SystemCapability.MultimodalInput.Input.Pointer +**System API**: This is a system API. + **Parameters** | Name | Type | Mandatory | Description | -- GitLab