js-apis-app-ability-uiAbility.md 30.1 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.app.ability.UIAbility (UIAbility)
M
m00512953 已提交
2

Z
zhongjianfei 已提交
3
UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力,组件协同主要提供如下常用功能:
M
m00512953 已提交
4

Z
zhongjianfei 已提交
5 6
- [Caller](#caller):由[startAbilityByCall](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall)接口返回,CallerAbility(调用者)可使用Caller与CalleeAbility(被调用者)进行通信。
- [Callee](#callee):UIAbility的内部对象,CalleeAbility(被调用者)可以通过Callee与Caller进行通信。
M
m00512953 已提交
7 8 9 10 11 12 13 14 15

> **说明:**
> 
> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。  
> 本模块接口仅可在Stage模型下使用。

## 导入模块

```ts
D
donglin 已提交
16
import UIAbility from '@ohos.app.ability.UIAbility';
M
m00512953 已提交
17 18 19 20
```

## 属性

M
m00512953 已提交
21
**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
22

Z
zhongjianfei 已提交
23
| 名称 | 类型 | 可读 | 可写 | 说明 |
M
m00512953 已提交
24
| -------- | -------- | -------- | -------- | -------- |
Z
zhongjianfei 已提交
25 26 27 28
| context | [UIAbilityContext](js-apis-inner-application-uiAbilityContext.md) | 是 | 否 | 上下文。 |
| launchWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility启动时的参数。 |
| lastRequestWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility最后请求时的参数。|
| callee | [Callee](#callee) | 是 | 否 | 调用Stub(桩)服务对象。|
M
m00512953 已提交
29

Z
zhongjianfei 已提交
30
## UIAbility.onCreate
M
m00512953 已提交
31

M
m00512953 已提交
32
onCreate(want: Want, param: AbilityConstant.LaunchParam): void;
M
m00512953 已提交
33

Z
zhongjianfei 已提交
34
UIAbility创建时回调,执行初始化业务逻辑操作。
M
m00512953 已提交
35

M
m00512953 已提交
36
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
37 38 39

**参数:**

Z
zhongjianfei 已提交
40 41 42
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-app-ability-want.md) | 是 | 当前UIAbility的Want类型信息,包括ability名称、bundle名称等。 |
M
m00512953 已提交
43
| param | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | 创建 ability、上次异常退出的原因信息。 |
M
m00512953 已提交
44 45 46 47

**示例:**

  ```ts
Z
zhongjianfei 已提交
48
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
49
      onCreate(want, param) {
M
mingxihua 已提交
50
          console.log('onCreate, want: ${want.abilityName}');
M
m00512953 已提交
51 52 53 54 55
      }
  }
  ```


Z
zhongjianfei 已提交
56
## UIAbility.onWindowStageCreate
M
m00512953 已提交
57 58 59 60 61

onWindowStageCreate(windowStage: window.WindowStage): void

当WindowStage创建后调用。

M
m00512953 已提交
62
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
63 64 65

**参数:**

Z
zhongjianfei 已提交
66 67
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
68
| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
M
m00512953 已提交
69 70 71 72

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
73
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
74 75 76 77 78 79 80
      onWindowStageCreate(windowStage) {
          console.log('onWindowStageCreate');
      }
  }
  ```


Z
zhongjianfei 已提交
81
## UIAbility.onWindowStageDestroy
M
m00512953 已提交
82 83 84 85 86

onWindowStageDestroy(): void

当WindowStage销毁后调用。

M
m00512953 已提交
87
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
88 89 90 91

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
92
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
93 94 95 96 97 98 99
      onWindowStageDestroy() {
          console.log('onWindowStageDestroy');
      }
  }
  ```


Z
zhongjianfei 已提交
100
## UIAbility.onWindowStageRestore
M
m00512953 已提交
101 102 103 104 105

onWindowStageRestore(windowStage: window.WindowStage): void

当迁移多实例ability时,恢复WindowStage后调用。

M
m00512953 已提交
106
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
107 108 109

**参数:**

Z
zhongjianfei 已提交
110 111
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
112
| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
M
m00512953 已提交
113 114 115 116

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
117
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
118 119 120 121 122 123 124
      onWindowStageRestore(windowStage) {
          console.log('onWindowStageRestore');
      }
  }
  ```


Z
zhongjianfei 已提交
125
## UIAbility.onDestroy
M
m00512953 已提交
126

M
mingxihua 已提交
127
onDestroy(): void | Promise<void>;
M
m00512953 已提交
128

Z
zhongjianfei 已提交
129
UIAbility生命周期回调,在销毁时回调,执行资源清理等操作。
M
m00512953 已提交
130

M
m00512953 已提交
131
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
132 133 134

**示例:**
    
Y
yangzk 已提交
135

M
m00512953 已提交
136
  ```ts
Z
zhongjianfei 已提交
137
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
138 139 140 141 142 143
      onDestroy() {
          console.log('onDestroy');
      }
  }
  ```

Y
yangzk 已提交
144 145 146 147 148 149 150 151 152 153
在执行完onDestroy生命周期回调后,应用可能会退出,从而可能导致onDestroy中的异步函数未能正确执行,比如异步写入数据库。可以使用异步生命周期,以确保异步onDestroy完成后再继续后续的生命周期。

  ```ts
class MyUIAbility extends UIAbility {
    async onDestroy() {
        console.log('onDestroy');
        // 调用异步函数...
    }
}
  ```
M
m00512953 已提交
154

Z
zhongjianfei 已提交
155
## UIAbility.onForeground
M
m00512953 已提交
156 157 158

onForeground(): void;

Z
zhongjianfei 已提交
159
UIAbility生命周期回调,当应用从后台转到前台时触发。
M
m00512953 已提交
160

M
m00512953 已提交
161
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
162 163 164 165

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
166
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
167 168 169 170 171 172 173
      onForeground() {
          console.log('onForeground');
      }
  }
  ```


Z
zhongjianfei 已提交
174
## UIAbility.onBackground
M
m00512953 已提交
175 176 177

onBackground(): void;

Z
zhongjianfei 已提交
178
UIAbility生命周期回调,当应用从前台转到后台时触发。
M
m00512953 已提交
179

M
m00512953 已提交
180
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
181 182 183 184

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
185
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
186 187 188 189 190 191 192
      onBackground() {
          console.log('onBackground');
      }
  }
  ```


Z
zhongjianfei 已提交
193
## UIAbility.onContinue
M
m00512953 已提交
194

M
mingxihua 已提交
195
onContinue(wantParam: { [key: string]: Object }): AbilityConstant.OnContinueResult;
M
m00512953 已提交
196 197 198

当ability迁移准备迁移时触发,保存数据。

M
m00512953 已提交
199
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
200 201 202

**参数:**

Z
zhongjianfei 已提交
203 204 205
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| wantParam | {[key: string]: any} | 是 | want相关参数。 |
M
m00512953 已提交
206 207 208

**返回值:**

Z
zhongjianfei 已提交
209 210
| 类型 | 说明 |
| -------- | -------- |
M
m00512953 已提交
211
| [AbilityConstant.OnContinueResult](js-apis-app-ability-abilityConstant.md#abilityconstantoncontinueresult) | 继续的结果。 |
M
m00512953 已提交
212 213 214 215

**示例:**
    
  ```ts
M
mingxihua 已提交
216
  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
Z
zhongjianfei 已提交
217
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
218 219
      onContinue(wantParams) {
          console.log('onContinue');
M
mingxihua 已提交
220
          wantParams['myData'] = 'my1234567';
M
m00512953 已提交
221
          return AbilityConstant.OnContinueResult.AGREE;
M
m00512953 已提交
222 223 224 225 226
      }
  }
  ```


Z
zhongjianfei 已提交
227
## UIAbility.onNewWant
M
m00512953 已提交
228

M
m00512953 已提交
229
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void;
M
m00512953 已提交
230

M
m00512953 已提交
231
当传入新的Want,ability再次被拉起时会回调执行该方法。
M
m00512953 已提交
232

M
m00512953 已提交
233
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
234 235 236

**参数:**

Z
zhongjianfei 已提交
237 238 239
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,如ability名称,包名等。 |
M
m00512953 已提交
240
| launchParams | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | UIAbility启动的原因、上次异常退出的原因信息。 |
M
m00512953 已提交
241 242 243 244

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
245
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
246
      onNewWant(want, launchParams) {
M
mingxihua 已提交
247 248
          console.log('onNewWant, want: ${want.abilityName}');
          console.log('onNewWant, launchParams: ${JSON.stringify(launchParams)}');
M
m00512953 已提交
249 250 251 252
      }
  }
  ```

Z
zhongjianfei 已提交
253
## UIAbility.onDump
M
m00512953 已提交
254

D
merge  
donglin 已提交
255
onDump(params: Array\<string>): Array\<string>;
M
m00512953 已提交
256 257 258

转储客户端信息时调用。

M
m00512953 已提交
259
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
260 261 262

**参数:**

Z
zhongjianfei 已提交
263 264 265
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| params | Array\<string> | 是 | 表示命令形式的参数。|
M
m00512953 已提交
266 267 268 269

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
270
  class MyUIAbility extends UIAbility {
D
merge  
donglin 已提交
271
      onDump(params) {
M
mingxihua 已提交
272
          console.log('dump, params: ${JSON.stringify(params)}');
M
mingxihua 已提交
273
          return ['params'];
M
m00512953 已提交
274 275 276 277 278
      }
  }
  ```


Z
zhongjianfei 已提交
279
## UIAbility.onSaveState
M
m00512953 已提交
280

M
mingxihua 已提交
281
onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: Object}): AbilityConstant.OnSaveResult;
M
m00512953 已提交
282

Z
zhongjianfei 已提交
283
该API配合[appRecovery](js-apis-app-ability-appRecovery.md)使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存UIAbility状态。
M
m00512953 已提交
284

M
m00512953 已提交
285
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
286 287 288

**参数:**

Z
zhongjianfei 已提交
289 290
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
291
| reason | [AbilityConstant.StateType](js-apis-app-ability-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因。 |
Z
zhongjianfei 已提交
292
| wantParam | {[key:&nbsp;string]:&nbsp;any} | 是 | want相关参数。 |
M
m00512953 已提交
293 294 295

**返回值:**

Z
zhongjianfei 已提交
296 297
| 类型 | 说明 |
| -------- | -------- |
M
m00512953 已提交
298
| [AbilityConstant.OnSaveResult](js-apis-app-ability-abilityConstant.md#abilityconstantonsaveresult) | 是否同意保存当前UIAbility的状态。 |
M
m00512953 已提交
299 300 301 302

**示例:**

  ```ts
M
mingxihua 已提交
303
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
M
m00512953 已提交
304

Z
zhongjianfei 已提交
305
class MyUIAbility extends UIAbility {
M
m00512953 已提交
306 307
    onSaveState(reason, wantParam) {
        console.log('onSaveState');
M
mingxihua 已提交
308
        wantParam['myData'] = 'my1234567';
M
m00512953 已提交
309
        return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
M
m00512953 已提交
310 311 312 313
    }
}
  ```

X
xieqiongyang 已提交
314 315 316 317
## UIAbility.onShare<sup>10+</sup>

onShare(wantParam:{ [key: string]: Object }): void;

318
ability设置分享数据。其中,ohos.extra.param.key.contentTitle表示分享框中对分享内容title的描述,ohos.extra.param.key.shareAbstract表示分享框中对携带内容的摘要描述,ohos.extra.param.key.shareUrl表示服务的在线地址。以上三项分享数据均是开发者填充,且为Object对象,对象的key分别为title,abstract,url。
X
xieqiongyang 已提交
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| wantParam | {[key:&nbsp;string]:&nbsp;Object} | 是 | want相关参数。 |

**示例:**
    
  ```ts
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
class MyUIAbility extends UIAbility {
    onShare(wantParams) {
        console.log('onShare');
X
xieqiongyang 已提交
335 336 337
        wantParams['ohos.extra.param.key.contentTitle'] = 'shareFeatureAbility';
        wantParams['ohos.extra.param.key.shareAbstract'] = 'huawei employee';
        wantParams['ohos.extra.param.key.shareUrl'] = 'w3.huawei.com';
X
xieqiongyang 已提交
338 339 340
    }
}
  ```
M
m00512953 已提交
341

D
donglin 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
## UIAbility.onPrepareToTerminate<sup>10+</sup>

onPrepareToTerminate(): boolean;

UIAbility生命周期回调,当系统预关闭开关打开后(配置系统参数persist.sys.prepare_terminate为true打开),在UIAbility关闭时触发,可在回调中定义操作来决定是否继续执行关闭UIAbility的操作。如果UIAbility在退出时需要与用户交互确认是否关闭UIAbility,可在此生命周期回调中定义预关闭操作配合[terminateSelf](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself)接口退出,如弹窗确认是否关闭,并配置预关闭生命周期返回true取消正常关闭。

**需要权限**:ohos.permission.PREPARE_APP_TERMINATE

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**返回值:**

| 类型 | 说明 |
| -- | -- |
| boolean | 是否执行UIAbility关闭操作,返回true表示本次UIAbility关闭流程取消,不再退出,返回false表示UIAbility继续正常关闭。 |

**示例:**

  ```ts
  export default class EntryAbility extends UIAbility {
362
    onPrepareToTerminate() {
D
donglin 已提交
363 364
      // 开发者定义预关闭动作
      // 例如拉起另一个ability,根据ability处理结果执行异步关闭
Y
yuyaozhi 已提交
365
      let want = {
D
donglin 已提交
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
        bundleName: "com.example.myapplication",
        moduleName: "entry",
        abilityName: "SecondAbility"
      }
      this.context.startAbilityForResult(want)
        .then((result)=>{
          // 获取ability处理结果,当返回结果的resultCode为0关闭当前UIAbility
          console.log('startAbilityForResult success, resultCode is ' + result.resultCode);
          if (result.resultCode === 0) {
            this.context.terminateSelf();
          }
        }).catch((err)=>{
          // 异常处理
          console.log('startAbilityForResult failed, err:' + JSON.stringify(err));
          this.context.terminateSelf();
        })

      return true; // 已定义预关闭操作后,返回true表示UIAbility取消关闭
    }
  }
  ```
M
m00512953 已提交
387 388 389 390 391 392 393

## Caller

通用组件Caller通信客户端调用接口, 用来向通用组件服务端发送约定数据。

## Caller.call

D
dy_study 已提交
394
call(method: string, data: rpc.Parcelable): Promise&lt;void&gt;;
M
m00512953 已提交
395 396 397

向通用组件服务端发送约定序列化数据。

M
m00512953 已提交
398
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
399 400 401

**参数:**

Z
zhongjianfei 已提交
402 403 404
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 约定的服务端注册事件字符串。 |
D
dy_study 已提交
405
| data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
M
m00512953 已提交
406 407 408

**返回值:**

Z
zhongjianfei 已提交
409 410 411
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | Promise形式返回应答。 |
M
m00512953 已提交
412 413 414 415 416

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
H
huangshiwei 已提交
417 418
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
419
| 16000050 | Internal error. |
D
donglin 已提交
420 421

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
422 423 424 425

**示例:**
    
  ```ts
D
dy_study 已提交
426
  class MyMessageAble{ // 自定义的Parcelable数据结构
M
mingxihua 已提交
427 428
    name:''
    str:''
M
m00512953 已提交
429 430 431 432 433
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
D
dy_study 已提交
434 435 436
    marshalling(messageSequence) {
      messageSequence.writeInt(this.num);
      messageSequence.writeString(this.str);
M
mingxihua 已提交
437
      console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
M
m00512953 已提交
438 439
      return true;
    }
D
dy_study 已提交
440 441 442
    unmarshalling(messageSequence) {
      this.num = messageSequence.readInt();
      this.str = messageSequence.readString();
M
mingxihua 已提交
443
      console.log('MyMessageAble unmarshalling num[${this.num}] str[${this.str}]');
M
m00512953 已提交
444 445 446
      return true;
    }
  };
M
mingxihua 已提交
447 448
  let method = 'call_Function'; // 约定的通知消息字符串
  let caller;
Z
zhongjianfei 已提交
449
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
450
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
451
      this.context.startAbilityByCall({
M
mingxihua 已提交
452 453 454
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
455 456
      }).then((obj) => {
        caller = obj;
457
        let msg = new MyMessageAble('msg', 'world'); // 参考Parcelable数据定义
M
m00512953 已提交
458 459 460 461 462
        caller.call(method, msg)
          .then(() => {
            console.log('Caller call() called');
          })
          .catch((callErr) => {
Z
zhoujun62 已提交
463
            console.log('Caller.call catch error, error.code: ${callErr.code}, error.message: ${callErr.message}');
M
m00512953 已提交
464 465
          });
      }).catch((err) => {
Z
zhoujun62 已提交
466
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
m00512953 已提交
467 468 469 470 471 472 473 474
      });
    }
  }
  ```


## Caller.callWithResult

D
dy_study 已提交
475
callWithResult(method: string, data: rpc.Parcelable): Promise&lt;rpc.MessageSequence&gt;;
M
m00512953 已提交
476 477 478

向通用组件服务端发送约定序列化数据, 并将服务端返回的约定序列化数据带回。

M
m00512953 已提交
479
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
480 481 482

**参数:**

Z
zhongjianfei 已提交
483 484 485
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 约定的服务端注册事件字符串。 |
D
dy_study 已提交
486
| data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
M
m00512953 已提交
487 488 489

**返回值:**

Z
zhongjianfei 已提交
490 491
| 类型 | 说明 |
| -------- | -------- |
D
dy_study 已提交
492
| Promise&lt;[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)&gt; | Promise形式返回通用组件服务端应答数据。 |
M
m00512953 已提交
493 494 495 496 497

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
H
huangshiwei 已提交
498 499
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
500
| 16000050 | Internal error. |
D
donglin 已提交
501 502

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
503 504 505 506 507

**示例:**

  ```ts
  class MyMessageAble{
M
mingxihua 已提交
508 509
    name:''
    str:''
M
m00512953 已提交
510 511 512 513 514
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
D
dy_study 已提交
515 516 517
    marshalling(messageSequence) {
      messageSequence.writeInt(this.num);
      messageSequence.writeString(this.str);
M
mingxihua 已提交
518
      console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
M
m00512953 已提交
519 520
      return true;
    }
D
dy_study 已提交
521 522 523
    unmarshalling(messageSequence) {
      this.num = messageSequence.readInt();
      this.str = messageSequence.readString();
M
mingxihua 已提交
524
      console.log('MyMessageAble unmarshalling num[${this.num] str[${this.str}]');
M
m00512953 已提交
525 526 527
      return true;
    }
  };
M
mingxihua 已提交
528 529
  let method = 'call_Function';
  let caller;
Z
zhongjianfei 已提交
530
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
531
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
532
      this.context.startAbilityByCall({
M
mingxihua 已提交
533 534 535
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
536 537
      }).then((obj) => {
        caller = obj;
M
mingxihua 已提交
538
        let msg = new MyMessageAble(1, 'world');
M
m00512953 已提交
539 540 541
        caller.callWithResult(method, msg)
          .then((data) => {
            console.log('Caller callWithResult() called');
M
mingxihua 已提交
542
            let retmsg = new MyMessageAble(0, '');
D
dy_study 已提交
543
            data.readParcelable(retmsg);
M
m00512953 已提交
544 545
          })
          .catch((callErr) => {
Z
zhoujun62 已提交
546
            console.log('Caller.callWithResult catch error, error.code: ${callErr.code}, error.message: ${callErr.message}');
M
m00512953 已提交
547 548
          });
      }).catch((err) => {
Z
zhoujun62 已提交
549
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
m00512953 已提交
550 551 552 553 554 555 556 557 558 559 560 561
      });
    }
  }
  ```


## Caller.release

release(): void;

主动释放通用组件服务端的通信接口。

M
m00512953 已提交
562
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
563 564 565 566 567 568 569

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
H
huangshiwei 已提交
570 571

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
572 573 574 575

**示例:**
    
  ```ts
M
mingxihua 已提交
576
  let caller;
Z
zhongjianfei 已提交
577
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
578
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
579
      this.context.startAbilityByCall({
M
mingxihua 已提交
580 581 582
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
583 584 585 586 587
      }).then((obj) => {
        caller = obj;
        try {
          caller.release();
        } catch (releaseErr) {
Z
zhoujun62 已提交
588
          console.log('Caller.release catch error, error.code: ${releaseErr.code}, error.message: ${releaseErr.message}');
M
m00512953 已提交
589 590
        }
      }).catch((err) => {
Z
zhoujun62 已提交
591
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
m00512953 已提交
592 593 594 595 596
      });
    }
  }
  ```

D
ability  
donglin 已提交
597 598
## Caller.onRelease

M
mingxihua 已提交
599
 onRelease(callback: OnReleaseCallback): void;
D
ability  
donglin 已提交
600 601 602

注册通用组件服务端Stub(桩)断开监听通知。

M
m00512953 已提交
603
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
D
ability  
donglin 已提交
604

H
huangshiwei 已提交
605 606 607 608 609 610 611 612
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 16200001 | Caller released. The caller has been released. |

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)

D
ability  
donglin 已提交
613 614
**参数:**

Z
zhongjianfei 已提交
615 616
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
mingxihua 已提交
617
| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
D
ability  
donglin 已提交
618 619 620 621

**示例:**
    
  ```ts
M
mingxihua 已提交
622
  let caller;
Z
zhongjianfei 已提交
623
  export default class MainUIAbility extends UIAbility {
D
ability  
donglin 已提交
624
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
625
      this.context.startAbilityByCall({
M
mingxihua 已提交
626 627 628
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
D
ability  
donglin 已提交
629 630 631 632
      }).then((obj) => {
          caller = obj;
          try {
            caller.onRelease((str) => {
M
mingxihua 已提交
633
                console.log(' Caller OnRelease CallBack is called ${str}');
D
ability  
donglin 已提交
634 635
            });
          } catch (error) {
Z
zhoujun62 已提交
636
            console.log('Caller.onRelease catch error, error.code: $error.code}, error.message: ${error.message}');
D
ability  
donglin 已提交
637 638
          }
      }).catch((err) => {
Z
zhoujun62 已提交
639
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
D
ability  
donglin 已提交
640 641 642 643
      });
    }
  }
  ```
M
m00512953 已提交
644

645
## Caller.onRemoteStateChange<sup>10+</sup>
646

647
onRemoteStateChange(callback: OnRemoteStateChangeCallback): void;
648 649 650 651 652 653 654 655 656 657 658

注册协同场景下跨设备组件状态变化监听通知。

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | [OnRemoteStateChangeCallback](#onremotestatechangecallback) | 是 | 返回onRemoteStateChange回调结果。 |

H
huangshiwei 已提交
659 660 661 662 663 664 665 666
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 16200001 | Caller released. The caller has been released. |

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)

667 668 669 670
**示例:**
    
  ```ts
  import UIAbility from '@ohos.app.ability.UIAbility';
Y
yuyaozhi 已提交
671
  import window from '@ohos.window';
672 673 674 675

  let caller;
  let dstDeviceId: string;
  export default class MainAbility extends UIAbility {
Y
yuyaozhi 已提交
676
      onWindowStageCreate(windowStage: window.WindowStage) {
677 678 679 680 681 682 683 684 685 686 687 688 689 690 691
          this.context.startAbilityByCall({
              bundleName: 'com.example.myservice',
              abilityName: 'MainUIAbility',
              deviceId: dstDeviceId
          }).then((obj) => {
              caller = obj;
              try {
                  caller.onRemoteStateChange((str) => {
                      console.log('Remote state changed ' + str);
                  });
              } catch (error) {
                  console.log('Caller.onRemoteStateChange catch error, error.code: ${JSON.stringify(error.code)}, error.message: ${JSON.stringify(error.message)}');
              }
          }).catch((err) => {
              console.log('Caller GetCaller error, error.code: ${JSON.stringify(err.code)}, error.message: ${JSON.stringify(err.message)}');
Y
yuyaozhi 已提交
692
          })
693 694 695 696
      }
  }
  ```

M
m00512953 已提交
697 698
## Caller.on

699
on(type: 'release', callback: OnReleaseCallback): void;
M
m00512953 已提交
700 701 702

注册通用组件服务端Stub(桩)断开监听通知。

M
m00512953 已提交
703
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
704 705 706

**参数:**

Z
zhongjianfei 已提交
707 708 709
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
M
mingxihua 已提交
710
| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
M
m00512953 已提交
711 712 713 714 715

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
716
| 401 | If the input parameter is not valid parameter. |
H
huangshiwei 已提交
717
| 16200001 | Caller released. The caller has been released. |
D
donglin 已提交
718 719

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
720 721 722 723

**示例:**
    
  ```ts
M
mingxihua 已提交
724
  let caller;
Z
zhongjianfei 已提交
725
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
726
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
727
      this.context.startAbilityByCall({
M
mingxihua 已提交
728 729 730
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
731 732 733
      }).then((obj) => {
          caller = obj;
          try {
M
mingxihua 已提交
734
            caller.on('release', (str) => {
M
mingxihua 已提交
735
                console.log(' Caller OnRelease CallBack is called ${str}');
M
m00512953 已提交
736 737
            });
          } catch (error) {
Z
zhoujun62 已提交
738
            console.log('Caller.on catch error, error.code: ${error.code}, error.message: ${error.message}');
M
m00512953 已提交
739 740
          }
      }).catch((err) => {
Z
zhoujun62 已提交
741
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
m00512953 已提交
742 743 744 745 746
      });
    }
  }
  ```

M
mingxihua 已提交
747 748
## Caller.off

M
mingxihua 已提交
749
off(type: 'release', callback: OnReleaseCallback): void;
M
mingxihua 已提交
750 751 752 753 754 755 756 757 758 759

取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
M
mingxihua 已提交
760
| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回off回调结果。 |
M
mingxihua 已提交
761

762 763 764 765 766 767
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | If the input parameter is not valid parameter. |

M
mingxihua 已提交
768 769 770
**示例:**
    
  ```ts
M
mingxihua 已提交
771
  let caller;
M
mingxihua 已提交
772 773 774
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
M
mingxihua 已提交
775 776 777
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
mingxihua 已提交
778 779 780 781
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
M
mingxihua 已提交
782
                console.log(' Caller OnRelease CallBack is called ${str}');
M
mingxihua 已提交
783
            };
M
mingxihua 已提交
784 785
            caller.on('release', onReleaseCallBack);
            caller.off('release', onReleaseCallBack);
M
mingxihua 已提交
786
          } catch (error) {
Z
zhoujun62 已提交
787
            console.log('Caller.on or Caller.off catch error, error.code: ${error.code}, error.message: ${error.message}');
M
mingxihua 已提交
788 789
          }
      }).catch((err) => {
Z
zhoujun62 已提交
790
        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
mingxihua 已提交
791 792 793 794 795 796 797
      });
    }
  }
  ```

## Caller.off

M
mingxihua 已提交
798
off(type: 'release'): void;
M
mingxihua 已提交
799 800 801 802 803 804 805 806 807 808 809 810 811 812

取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |

**示例:**
    
  ```ts
M
mingxihua 已提交
813
  let caller;
M
mingxihua 已提交
814 815 816
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
M
mingxihua 已提交
817 818 819
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
mingxihua 已提交
820 821 822 823
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
M
mingxihua 已提交
824
                console.log(' Caller OnRelease CallBack is called ${str}');
M
mingxihua 已提交
825
            };
M
mingxihua 已提交
826 827
            caller.on('release', onReleaseCallBack);
            caller.off('release');
M
mingxihua 已提交
828
          } catch (error) {  
Z
zhoujun62 已提交
829
            console.error('Caller.on or Caller.off catch error, error.code: ${error.code}, error.message: ${error.message}');
M
mingxihua 已提交
830 831
          }
      }).catch((err) => {
Z
zhoujun62 已提交
832
        console.error('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
M
mingxihua 已提交
833 834 835 836
      });
    }
  }
  ```
M
m00512953 已提交
837 838 839 840 841 842 843

## Callee

通用组件服务端注册和解除客户端caller通知送信的callback接口。

## Callee.on

D
merge  
donglin 已提交
844
on(method: string, callback: CalleeCallback): void;
M
m00512953 已提交
845 846 847

通用组件服务端注册消息通知callback。

M
m00512953 已提交
848
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
849 850 851

**参数:**

Z
zhongjianfei 已提交
852 853 854
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 与客户端约定的通知消息字符串。 |
D
dy_study 已提交
855
| callback | [CalleeCallback](#calleecallback) | 是 | 一个[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的[rpc.Parcelable](js-apis-rpc.md#parcelable9)数据对象,&nbsp;其他视为函数执行错误。 |
M
m00512953 已提交
856 857 858 859 860

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
H
huangshiwei 已提交
861 862
| 16200004 | Method registered. The method has registered. |
| 16000050 | Internal error. |
D
donglin 已提交
863 864

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
865 866 867 868 869

**示例:**

  ```ts
  class MyMessageAble{
M
mingxihua 已提交
870 871
      name:''
      str:''
M
m00512953 已提交
872 873 874 875 876
      num: 1
      constructor(name, str) {
        this.name = name;
        this.str = str;
      }
D
dy_study 已提交
877 878 879
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
M
mingxihua 已提交
880
          console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
M
m00512953 已提交
881 882
          return true;
      }
D
dy_study 已提交
883 884 885
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
M
mingxihua 已提交
886
          console.log('MyMessageAble unmarshalling num[${this.num}] str[${this.str}]');
M
m00512953 已提交
887 888 889
          return true;
      }
  };
M
mingxihua 已提交
890
  let method = 'call_Function';
M
m00512953 已提交
891
  function funcCallBack(pdata) {
M
mingxihua 已提交
892
      console.log('Callee funcCallBack is called ${pdata}');
M
mingxihua 已提交
893
      let msg = new MyMessageAble('test', '');
D
dy_study 已提交
894
      pdata.readParcelable(msg);
M
mingxihua 已提交
895
      return new MyMessageAble('test1', 'Callee test');
M
m00512953 已提交
896
  }
Z
zhongjianfei 已提交
897
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
898 899 900 901 902
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.on(method, funcCallBack);
      } catch (error) {
Z
zhoujun62 已提交
903
        console.log('Callee.on catch error, error.code: ${error.code}, error.message: ${error.message}');
M
m00512953 已提交
904 905 906 907 908 909 910 911 912 913 914
      }
    }
  }
  ```

## Callee.off

off(method: string): void;

解除通用组件服务端注册消息通知callback。

M
m00512953 已提交
915
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
916 917 918

**参数:**

Z
zhongjianfei 已提交
919 920 921
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 已注册的通知事件字符串。 |
M
m00512953 已提交
922 923 924 925 926

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
H
huangshiwei 已提交
927 928
| 16200005 | Method not registered. The method has not registered. |
| 16000050 | Internal error. |
D
donglin 已提交
929 930

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
931 932 933 934 935


**示例:**
    
  ```ts
M
mingxihua 已提交
936
  let method = 'call_Function';
Z
zhongjianfei 已提交
937
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
938 939 940 941 942
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.off(method);
      } catch (error) {
Z
zhoujun62 已提交
943
        console.log('Callee.off catch error, error.code: ${error.code}, error.message: ${error.message}');
M
m00512953 已提交
944 945 946 947 948 949 950 951 952
      }
    }
  }
  ```

## OnReleaseCallback

(msg: string): void;

M
m00512953 已提交
953
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
954

Z
zhongjianfei 已提交
955
| 名称 | 可读 | 可写 | 类型 | 说明 |
M
m00512953 已提交
956
| -------- | -------- | -------- | -------- | -------- |
Z
zhongjianfei 已提交
957
| (msg: string) | 是 | 否 | function | 调用者注册的侦听器函数接口的原型。 |
M
m00512953 已提交
958

959
## OnRemoteStateChangeCallback<sup>10+</sup>
960 961 962 963 964 965 966 967 968

(msg: string): void;

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

| 名称 | 可读 | 可写 | 类型 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| (msg: string) | 是 | 否 | function | 调用者注册的协同场景下组件状态变化监听函数接口的原型。 |

M
m00512953 已提交
969 970
## CalleeCallback

D
dy_study 已提交
971
(indata: rpc.MessageSequence): rpc.Parcelable;
M
m00512953 已提交
972

M
m00512953 已提交
973
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
974

Z
zhongjianfei 已提交
975
| 名称 | 可读 | 可写 | 类型 | 说明 |
M
m00512953 已提交
976
| -------- | -------- | -------- | -------- | -------- |
D
dy_study 已提交
977
| (indata: [rpc.MessageSequence](js-apis-rpc.md#messagesequence9)) | 是 | 否 | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 被调用方注册的消息侦听器函数接口的原型。 |