js-apis-application-ability.md 21.5 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.application.Ability (Ability)
ahjxliubao2's avatar
ahjxliubao2 已提交
2

Y
yuyaozhi 已提交
3 4 5 6 7 8 9
Ability模块提供对Ability生命周期、上下文环境等调用管理的能力,包括Ability创建、销毁、转储客户端信息等。

该模块提供以下Ability相关的常用功能:

- [Caller](#caller):通用组件Caller通信客户端调用接口, 用来向通用组件服务端发送约定数据。
- [Callee](#callee):通用组件服务端注册和解除客户端caller通知送信的callback接口。

Y
yuyaozhi 已提交
10 11
> **说明:**
> 
12 13
> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。  
> 本模块接口仅可在Stage模型下使用。
ahjxliubao2's avatar
ahjxliubao2 已提交
14 15 16

## 导入模块

M
m00512953 已提交
17
```ts
18
import UIAbility from '@ohos.app.ability.UIAbility';
ahjxliubao2's avatar
ahjxliubao2 已提交
19 20 21 22
```

## 属性

23 24
**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.AbilityCore

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

Y
yuyaozhi 已提交
32
## Ability.onCreate
ahjxliubao2's avatar
ahjxliubao2 已提交
33

Y
yuyaozhi 已提交
34
onCreate(want: Want, param: AbilityConstant.LaunchParam): void;
ahjxliubao2's avatar
ahjxliubao2 已提交
35 36 37

Ability创建时回调,执行初始化业务逻辑操作。

Y
yuyaozhi 已提交
38 39 40 41 42
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
43
  | -------- | -------- | -------- | -------- |
M
m00512953 已提交
44
  | want | [Want](js-apis-app-ability-want.md) | 是 | 当前Ability的Want类型信息,包括ability名称、bundle名称等。 | 
Y
yuyaozhi 已提交
45
  | param | AbilityConstant.LaunchParam | 是 | 创建 ability、上次异常退出的原因信息。 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
46

Y
yuyaozhi 已提交
47
**示例:**
H
HuangXW 已提交
48

49
  ```ts
50
  export default class EntryAbility extends UIAbility {
ahjxliubao2's avatar
ahjxliubao2 已提交
51 52 53 54 55 56 57
      onCreate(want, param) {
          console.log('onCreate, want:' + want.abilityName);
      }
  }
  ```


Y
yuyaozhi 已提交
58
## Ability.onWindowStageCreate
ahjxliubao2's avatar
ahjxliubao2 已提交
59 60 61 62 63

onWindowStageCreate(windowStage: window.WindowStage): void

当WindowStage创建后调用。

Y
yuyaozhi 已提交
64 65 66 67 68
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
69
  | -------- | -------- | -------- | -------- |
M
m00512953 已提交
70
  | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
71

Y
yuyaozhi 已提交
72
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
73
    
74
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
75 76 77 78 79 80 81 82
  class myAbility extends Ability {
      onWindowStageCreate(windowStage) {
          console.log('onWindowStageCreate');
      }
  }
  ```


Y
yuyaozhi 已提交
83
## Ability.onWindowStageDestroy
ahjxliubao2's avatar
ahjxliubao2 已提交
84 85 86 87 88

onWindowStageDestroy(): void

当WindowStage销毁后调用。

Y
yuyaozhi 已提交
89 90 91
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
92
    
93
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
94 95 96 97 98 99 100 101
  class myAbility extends Ability {
      onWindowStageDestroy() {
          console.log('onWindowStageDestroy');
      }
  }
  ```


Y
yuyaozhi 已提交
102
## Ability.onWindowStageRestore
ahjxliubao2's avatar
ahjxliubao2 已提交
103 104 105 106 107

onWindowStageRestore(windowStage: window.WindowStage): void

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

Y
yuyaozhi 已提交
108 109 110 111 112
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
113
  | -------- | -------- | -------- | -------- |
M
m00512953 已提交
114
  | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
115

Y
yuyaozhi 已提交
116
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
117
    
118
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
119 120 121 122 123 124 125 126
  class myAbility extends Ability {
      onWindowStageRestore(windowStage) {
          console.log('onWindowStageRestore');
      }
  }
  ```


Y
yuyaozhi 已提交
127
## Ability.onDestroy
ahjxliubao2's avatar
ahjxliubao2 已提交
128 129 130 131 132

onDestroy(): void;

Ability生命周期回调,在销毁时回调,执行资源清理等操作。

Y
yuyaozhi 已提交
133 134 135
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
136
    
137
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
138 139 140 141 142 143 144 145
  class myAbility extends Ability {
      onDestroy() {
          console.log('onDestroy');
      }
  }
  ```


Y
yuyaozhi 已提交
146
## Ability.onForeground
ahjxliubao2's avatar
ahjxliubao2 已提交
147 148 149

onForeground(): void;

150
Ability生命周期回调,当应用从后台转到前台时触发。
ahjxliubao2's avatar
ahjxliubao2 已提交
151

Y
yuyaozhi 已提交
152 153 154
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
155
    
156
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
157 158 159 160 161 162 163 164
  class myAbility extends Ability {
      onForeground() {
          console.log('onForeground');
      }
  }
  ```


Y
yuyaozhi 已提交
165
## Ability.onBackground
ahjxliubao2's avatar
ahjxliubao2 已提交
166 167 168

onBackground(): void;

169
Ability生命周期回调,当应用从前台转到后台时触发。
ahjxliubao2's avatar
ahjxliubao2 已提交
170

Y
yuyaozhi 已提交
171 172 173
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
174
    
175
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
176 177 178 179 180 181 182 183
  class myAbility extends Ability {
      onBackground() {
          console.log('onBackground');
      }
  }
  ```


Y
yuyaozhi 已提交
184
## Ability.onContinue
ahjxliubao2's avatar
ahjxliubao2 已提交
185

Y
yuyaozhi 已提交
186
onContinue(wantParam : {[key: string]: any}): AbilityConstant.OnContinueResult;
ahjxliubao2's avatar
ahjxliubao2 已提交
187 188 189

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

Y
yuyaozhi 已提交
190 191 192 193 194
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
195 196 197
  | -------- | -------- | -------- | -------- |
  | wantParam | {[key: string]: any} | 是 | want相关参数。 | 

Y
yuyaozhi 已提交
198 199 200
**返回值:**

  | 类型 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
201
  | -------- | -------- |
Y
yuyaozhi 已提交
202
  | AbilityConstant.OnContinueResult | 继续的结果。 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
203

Y
yuyaozhi 已提交
204
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
205
    
206
  ```ts
Y
yuyaozhi 已提交
207
  import AbilityConstant from "@ohos.application.AbilityConstant"
ahjxliubao2's avatar
ahjxliubao2 已提交
208 209 210 211
  class myAbility extends Ability {
      onContinue(wantParams) {
          console.log('onContinue');
          wantParams["myData"] = "my1234567";
Y
yuyaozhi 已提交
212
          return AbilityConstant.OnContinueResult.AGREE;
ahjxliubao2's avatar
ahjxliubao2 已提交
213 214 215 216 217
      }
  }
  ```


Y
yuyaozhi 已提交
218
## Ability.onNewWant
ahjxliubao2's avatar
ahjxliubao2 已提交
219

Z
zhangyafei-echo 已提交
220
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void;
ahjxliubao2's avatar
ahjxliubao2 已提交
221

M
m00512953 已提交
222
当传入新的Want,ability再次被拉起时会回调执行该方法。
ahjxliubao2's avatar
ahjxliubao2 已提交
223

Y
yuyaozhi 已提交
224 225 226 227
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

228 229 230 231
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-application-want.md) | 是 | Want类型参数,如Ability名称,Bundle名称等。 |
| launchParams | AbilityConstant.LaunchParam | 是 | Ability启动的原因、上次异常退出的原因信息。 |
ahjxliubao2's avatar
ahjxliubao2 已提交
232

Y
yuyaozhi 已提交
233
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
234
    
235
  ```ts
ahjxliubao2's avatar
ahjxliubao2 已提交
236
  class myAbility extends Ability {
M
m00512953 已提交
237
      onNewWant(want, launchParams) {
ahjxliubao2's avatar
ahjxliubao2 已提交
238
          console.log('onNewWant, want:' + want.abilityName);
M
m00512953 已提交
239
          console.log('onNewWant, launchParams:' + JSON.stringify(launchParams));
ahjxliubao2's avatar
ahjxliubao2 已提交
240 241 242 243
      }
  }
  ```

D
ability  
donglin 已提交
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
## Ability.onConfigurationUpdated

onConfigurationUpdated(config: Configuration): void;

环境变化通知接口,发生全局配置变更时回调。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
  | -------- | -------- | -------- | -------- |
  | config | [Configuration](js-apis-application-configuration.md) | 是 | 发生全局配置变更时触发回调,当前全局配置包括系统语言、深浅色模式。 | 

**示例:**
    
  ```ts
  class myAbility extends Ability {
      onConfigurationUpdated(config) {
          console.log('onConfigurationUpdated, language:' + config.language);
      }
  }
  ```

268 269 270 271
## Ability.dump

dump(params: Array\<string>): Array\<string>;

Y
yuyaozhi 已提交
272
转储客户端信息时调用。
273 274 275 276 277 278 279

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
  | -------- | -------- | -------- | -------- |
Y
yuyaozhi 已提交
280
  | params | Array\<string> | 是 | 表示命令形式的参数。| 
281 282 283

**示例:**
    
284
  ```ts
285 286 287
  class myAbility extends Ability {
      dump(params) {
          console.log('dump, params:' + JSON.stringify(params));
Y
yuyaozhi 已提交
288
          return ["params"]
289 290 291 292
      }
  }
  ```

D
ability  
donglin 已提交
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
## Ability.onMemoryLevel

onMemoryLevel(level: AbilityConstant.MemoryLevel): void;

当系统已决定调整内存时调用。例如,当该功能在后台运行时,没有足够的内存来运行尽可能多的后台进程时可以使用。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
  | -------- | -------- | -------- | -------- |
  | level | [AbilityConstant.MemoryLevel](js-apis-application-abilityConstant.md#abilityconstantmemorylevel) | 是 | 回调返回内存微调级别,显示当前内存使用状态。| 

**示例:**
    
  ```ts
  class myAbility extends Ability {
    onMemoryLevel(level) {
        console.log('onMemoryLevel, level:' + JSON.stringify(level));
    } 
  }
  ```
316

Z
zhancaijin 已提交
317 318 319 320
## Ability.onSaveState

onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: any}): AbilityConstant.OnSaveResult;

321
该API配合[appRecovery](js-apis-app-ability-appRecovery.md)使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存Ability状态。
Z
zhancaijin 已提交
322 323 324 325 326 327 328

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
Z
zhancaijin 已提交
329
  | reason | [AbilityConstant.StateType](js-apis-application-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因。 |
Z
zhancaijin 已提交
330 331 332 333 334 335
  | wantParam | {[key:&nbsp;string]:&nbsp;any} | 是 | want相关参数。 |

**返回值:**

  | 类型 | 说明 |
  | -------- | -------- |
Z
zhancaijin 已提交
336
  | AbilityConstant.OnSaveResult | 是否同意保存当前Ability的状态。 |
Z
zhancaijin 已提交
337 338 339

**示例:**

M
m00512953 已提交
340
  ```ts
Y
yuyaozhi 已提交
341 342 343 344 345 346 347 348 349
import AbilityConstant from '@ohos.application.AbilityConstant'

class myAbility extends Ability {
    onSaveState(reason, wantParam) {
        console.log('onSaveState');
        wantParam["myData"] = "my1234567";
        return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
    }
}
Z
zhancaijin 已提交
350 351 352
  ```


ahjxliubao2's avatar
ahjxliubao2 已提交
353 354 355 356 357

## Caller

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

Y
yuyaozhi 已提交
358
## Caller.call
ahjxliubao2's avatar
ahjxliubao2 已提交
359

Y
yuyaozhi 已提交
360
call(method: string, data: rpc.Sequenceable): Promise&lt;void&gt;;
ahjxliubao2's avatar
ahjxliubao2 已提交
361 362 363

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

Y
yuyaozhi 已提交
364 365 366 367 368
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
369 370 371 372
  | -------- | -------- | -------- | -------- |
  | method | string | 是 | 约定的服务端注册事件字符串。 | 
  | data | rpc.Sequenceable | 是 | 由开发者实现的Sequenceable可序列化数据。 | 

Y
yuyaozhi 已提交
373 374 375
**返回值:**

  | 类型 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
376 377 378
  | -------- | -------- |
  | Promise&lt;void&gt; | Promise形式返回应答。 | 

H
HuangXW 已提交
379 380 381 382 383 384 385 386 387 388
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 201 | The application does not have permission to call the interface. |
| 401 | Invalid input parameter. |
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
| 16000050 | Internal Error. |

Y
yuyaozhi 已提交
389
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
390
    
391
  ```ts
392 393 394
  import UIAbility from '@ohos.app.ability.UIAbility';
  
  class MyMessageAble { // 自定义的Sequenceable数据结构
H
HuangXW 已提交
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413
    name:""
    str:""
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
    marshalling(messageParcel) {
      messageParcel.writeInt(this.num);
      messageParcel.writeString(this.str);
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
    unmarshalling(messageParcel) {
      this.num = messageParcel.readInt();
      this.str = messageParcel.readString();
      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
414 415 416
  };
  var method = 'call_Function'; // 约定的通知消息字符串
  var caller;
417
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
418 419 420
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
421
        abilityName: "EntryAbility",
H
HuangXW 已提交
422 423 424
        deviceId: ""
      }).then((obj) => {
        caller = obj;
425
        let msg = new MyMessageAble("msg", "world"); // 参考Sequenceable数据定义
H
HuangXW 已提交
426 427 428 429 430 431 432 433 434 435 436 437 438
        caller.call(method, msg)
          .then(() => {
            console.log('Caller call() called');
          })
          .catch((callErr) => {
            console.log('Caller.call catch error, error.code: ' + JSON.stringify(callErr.code) +
              ' error.message: ' + JSON.stringify(callErr.message));
          });
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
439 440 441 442
  }
  ```


Y
yuyaozhi 已提交
443
## Caller.callWithResult
ahjxliubao2's avatar
ahjxliubao2 已提交
444

Y
yuyaozhi 已提交
445
callWithResult(method: string, data: rpc.Sequenceable): Promise&lt;rpc.MessageParcel&gt;;
ahjxliubao2's avatar
ahjxliubao2 已提交
446 447 448

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

Y
yuyaozhi 已提交
449 450 451 452 453
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
454 455 456 457
  | -------- | -------- | -------- | -------- |
  | method | string | 是 | 约定的服务端注册事件字符串。 | 
  | data | rpc.Sequenceable | 是 | 由开发者实现的Sequenceable可序列化数据。 | 

Y
yuyaozhi 已提交
458 459 460
**返回值:**

  | 类型 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
461 462 463
  | -------- | -------- |
  | Promise&lt;rpc.MessageParcel&gt; | Promise形式返回通用组件服务端应答数据。 | 

H
HuangXW 已提交
464 465 466 467 468 469 470 471 472 473
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 201 | The application does not have permission to call the interface. |
| 401 | Invalid input parameter. |
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
| 16000050 | Internal Error. |

Y
yuyaozhi 已提交
474
**示例:**
H
HuangXW 已提交
475

476
  ```ts
477 478
  import UIAbility from '@ohos.app.ability.UIAbility';
  
ahjxliubao2's avatar
ahjxliubao2 已提交
479
  class MyMessageAble{
H
HuangXW 已提交
480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
    name:""
    str:""
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
    marshalling(messageParcel) {
      messageParcel.writeInt(this.num);
      messageParcel.writeString(this.str);
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
    unmarshalling(messageParcel) {
      this.num = messageParcel.readInt();
      this.str = messageParcel.readString();
      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
499 500 501
  };
  var method = 'call_Function';
  var caller;
502
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
503 504 505
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
506
        abilityName: "EntryAbility",
H
HuangXW 已提交
507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525
        deviceId: ""
      }).then((obj) => {
        caller = obj;
        let msg = new MyMessageAble(1, "world");
        caller.callWithResult(method, msg)
          .then((data) => {
            console.log('Caller callWithResult() called');
            let retmsg = new MyMessageAble(0, "");
            data.readSequenceable(retmsg);
          })
          .catch((callErr) => {
            console.log('Caller.callWithResult catch error, error.code: ' + JSON.stringify(callErr.code) +
              ' error.message: ' + JSON.stringify(callErr.message));
          });
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
526 527 528 529
  }
  ```


Y
yuyaozhi 已提交
530
## Caller.release
ahjxliubao2's avatar
ahjxliubao2 已提交
531 532 533 534 535

release(): void;

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

Y
yuyaozhi 已提交
536 537
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

H
HuangXW 已提交
538 539 540 541 542 543 544 545 546
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | Invalid input parameter. |
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
| 16000050 | Internal Error. |

Y
yuyaozhi 已提交
547
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
548
    
549

550
  ```ts
551 552
  import UIAbility from '@ohos.app.ability.UIAbility';
  
ahjxliubao2's avatar
ahjxliubao2 已提交
553
  var caller;
554 555
  
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
556 557 558
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
559
        abilityName: "EntryAbility",
H
HuangXW 已提交
560 561 562 563 564 565 566 567 568 569 570 571 572 573
        deviceId: ""
      }).then((obj) => {
        caller = obj;
        try {
          caller.release();
        } catch (releaseErr) {
          console.log('Caller.release catch error, error.code: ' + JSON.stringify(releaseErr.code) +
            ' error.message: ' + JSON.stringify(releaseErr.message));
        }
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
574 575 576
  }
  ```

D
merge  
donglin 已提交
577
## Caller.onRelease
ahjxliubao2's avatar
ahjxliubao2 已提交
578

D
merge  
donglin 已提交
579
 onRelease(callback: OnReleaseCallBack): void;
ahjxliubao2's avatar
ahjxliubao2 已提交
580

Y
yuyaozhi 已提交
581
注册通用组件服务端Stub(桩)断开监听通知。
ahjxliubao2's avatar
ahjxliubao2 已提交
582

Y
yuyaozhi 已提交
583 584 585 586 587
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
588
  | -------- | -------- | -------- | -------- |
Y
yuyaozhi 已提交
589
  | callback | OnReleaseCallBack | 是 | 返回onRelease回调结果。 | 
H
HuangXW 已提交
590

Y
yuyaozhi 已提交
591
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
592
    
593
  ```ts
594 595
  import UIAbility from '@ohos.app.ability.UIAbility';
  
ahjxliubao2's avatar
ahjxliubao2 已提交
596
  var caller;
597 598
  
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
599 600 601
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
602
        abilityName: "EntryAbility",
H
HuangXW 已提交
603 604 605 606
        deviceId: ""
      }).then((obj) => {
          caller = obj;
          try {
D
merge  
donglin 已提交
607
            caller.onRelease((str) => {
H
HuangXW 已提交
608 609 610 611 612 613 614 615 616 617 618
                console.log(' Caller OnRelease CallBack is called ' + str);
            });
          } catch (error) {
            console.log('Caller.on 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));
      });
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
619 620 621 622 623 624 625 626
  }
  ```


## Callee

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

Y
yuyaozhi 已提交
627
## Callee.on
ahjxliubao2's avatar
ahjxliubao2 已提交
628

629
on(method: string, callback: CalleeCallBack): void;
ahjxliubao2's avatar
ahjxliubao2 已提交
630 631 632

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

Y
yuyaozhi 已提交
633 634 635 636 637
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
638 639
  | -------- | -------- | -------- | -------- |
  | method | string | 是 | 与客户端约定的通知消息字符串。 | 
640
  | callback | CalleeCallBack | 是 | 一个rpc.MessageParcel类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的rpc.Sequenceable数据对象,&nbsp;其他视为函数执行错误。 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
641

H
HuangXW 已提交
642 643 644 645 646 647 648 649
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | Invalid input parameter. |
| 16200004 | Method registered. The method has registered. |
| 16000050 | Internal Error. |

Y
yuyaozhi 已提交
650
**示例:**
H
HuangXW 已提交
651

652
  ```ts
653
  import UIAbility from '@ohos.app.ability.UIAbility';
ahjxliubao2's avatar
ahjxliubao2 已提交
654
  class MyMessageAble{
Y
yuyaozhi 已提交
655 656 657
      name:""
      str:""
      num: 1
ahjxliubao2's avatar
ahjxliubao2 已提交
658 659 660 661
      constructor(name, str) {
        this.name = name;
        this.str = str;
      }
ahjxliubao2's avatar
ahjxliubao2 已提交
662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
  };
  var method = 'call_Function';
  function funcCallBack(pdata) {
      console.log('Callee funcCallBack is called ' + pdata);
M
m00512953 已提交
678
      let msg = new MyMessageAble("test", "");
ahjxliubao2's avatar
ahjxliubao2 已提交
679
      pdata.readSequenceable(msg);
M
m00512953 已提交
680
      return new MyMessageAble("test1", "Callee test");
ahjxliubao2's avatar
ahjxliubao2 已提交
681
  }
682
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
683 684 685 686 687 688 689
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.on(method, funcCallBack);
      } catch (error) {
        console.log('Callee.on catch error, error.code: ' + JSON.stringify(error.code) +
          ' error.message: ' + JSON.stringify(error.message));
ahjxliubao2's avatar
ahjxliubao2 已提交
690
      }
H
HuangXW 已提交
691
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
692 693 694
  }
  ```

Y
yuyaozhi 已提交
695
## Callee.off
ahjxliubao2's avatar
ahjxliubao2 已提交
696 697 698 699 700

off(method: string): void;

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

Y
yuyaozhi 已提交
701 702 703 704 705
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

  | 参数名 | 类型 | 必填 | 说明 | 
ahjxliubao2's avatar
ahjxliubao2 已提交
706 707 708
  | -------- | -------- | -------- | -------- |
  | method | string | 是 | 已注册的通知事件字符串。 | 

H
HuangXW 已提交
709 710 711 712 713 714 715 716 717
**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | Invalid input parameter. |
| 16200005 | Method not registered. The method has not registered. |
| 16000050 | Internal Error. |


Y
yuyaozhi 已提交
718
**示例:**
ahjxliubao2's avatar
ahjxliubao2 已提交
719
    
720
  ```ts
721 722
  import UIAbility from '@ohos.app.ability.UIAbility';
  
ahjxliubao2's avatar
ahjxliubao2 已提交
723
  var method = 'call_Function';
724 725
  
  export default class EntryAbility extends UIAbility {
H
HuangXW 已提交
726 727 728 729 730 731 732
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.off(method);
      } catch (error) {
        console.log('Callee.off catch error, error.code: ' + JSON.stringify(error.code) +
          ' error.message: ' + JSON.stringify(error.message));
ahjxliubao2's avatar
ahjxliubao2 已提交
733
      }
H
HuangXW 已提交
734
    }
ahjxliubao2's avatar
ahjxliubao2 已提交
735 736
  }
  ```
737

D
merge  
donglin 已提交
738
## OnReleaseCallBack
739 740 741

(msg: string): void;

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

D
donglin 已提交
744
| 名称 | 类型 | 可读 | 可写 | 说明 | 
745
| -------- | -------- | -------- | -------- | -------- |
746
| (msg: string) | function | 是 | 否 | 调用者注册的侦听器函数接口的原型。 | 
747

D
merge  
donglin 已提交
748
## CalleeCallBack
749 750 751

(indata: rpc.MessageParcel): rpc.Sequenceable;

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

D
donglin 已提交
754
| 名称 | 类型 | 可读 | 可写 | 说明 | 
755
| -------- | -------- | -------- | -------- | -------- |
M
m00512953 已提交
756
| (indata: rpc.MessageParcel) | rpc.Sequenceable | 是 | 否 | 被调用方注册的消息侦听器函数接口的原型。 |