Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
8485a7ce
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
8485a7ce
编写于
9月 06, 2023
作者:
O
openharmony_ci
提交者:
Gitee
9月 06, 2023
浏览文件
操作
浏览文件
下载
差异文件
!24017 [monthly0815]公共基础类库指南arkTs整改
Merge pull request !24017 from buzhuyu/cherry-pick-1693963675
上级
e702d3d9
891e4514
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
513 addition
and
524 deletion
+513
-524
zh-cn/application-dev/arkts-utils/async-concurrency-overview.md
...application-dev/arkts-utils/async-concurrency-overview.md
+11
-9
zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md
...ication-dev/arkts-utils/cpu-intensive-task-development.md
+78
-81
zh-cn/application-dev/arkts-utils/io-intensive-task-development.md
...lication-dev/arkts-utils/io-intensive-task-development.md
+42
-39
zh-cn/application-dev/arkts-utils/linear-container.md
zh-cn/application-dev/arkts-utils/linear-container.md
+1
-1
zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md
...tion-dev/arkts-utils/multi-thread-concurrency-overview.md
+2
-2
zh-cn/application-dev/arkts-utils/nonlinear-container.md
zh-cn/application-dev/arkts-utils/nonlinear-container.md
+1
-1
zh-cn/application-dev/arkts-utils/single-io-development.md
zh-cn/application-dev/arkts-utils/single-io-development.md
+18
-20
zh-cn/application-dev/arkts-utils/sync-task-development.md
zh-cn/application-dev/arkts-utils/sync-task-development.md
+70
-70
zh-cn/application-dev/arkts-utils/taskpool-vs-worker.md
zh-cn/application-dev/arkts-utils/taskpool-vs-worker.md
+5
-7
zh-cn/application-dev/arkts-utils/xml-conversion.md
zh-cn/application-dev/arkts-utils/xml-conversion.md
+4
-5
zh-cn/application-dev/arkts-utils/xml-generation.md
zh-cn/application-dev/arkts-utils/xml-generation.md
+5
-6
zh-cn/application-dev/arkts-utils/xml-parsing.md
zh-cn/application-dev/arkts-utils/xml-parsing.md
+136
-139
zh-cn/application-dev/reference/apis/js-apis-taskpool.md
zh-cn/application-dev/reference/apis/js-apis-taskpool.md
+2
-2
zh-cn/application-dev/reference/apis/js-apis-worker.md
zh-cn/application-dev/reference/apis/js-apis-worker.md
+138
-142
未找到文件。
zh-cn/application-dev/arkts-utils/async-concurrency-overview.md
浏览文件 @
8485a7ce
...
@@ -16,7 +16,7 @@ Promise有三种状态:pending(进行中)、fulfilled(已完成)和rej
...
@@ -16,7 +16,7 @@ Promise有三种状态:pending(进行中)、fulfilled(已完成)和rej
最基本的用法是通过构造函数实例化一个Promise对象,同时传入一个带有两个参数的函数,通常称为executor函数。executor函数接收两个参数:resolve和reject,分别表示异步操作成功和失败时的回调函数。例如,以下代码创建了一个Promise对象并模拟了一个异步操作:
最基本的用法是通过构造函数实例化一个Promise对象,同时传入一个带有两个参数的函数,通常称为executor函数。executor函数接收两个参数:resolve和reject,分别表示异步操作成功和失败时的回调函数。例如,以下代码创建了一个Promise对象并模拟了一个异步操作:
```
j
s
```
t
s
const
promise
:
Promise
<
number
>
=
new
Promise
((
resolve
:
Function
,
reject
:
Function
)
=>
{
const
promise
:
Promise
<
number
>
=
new
Promise
((
resolve
:
Function
,
reject
:
Function
)
=>
{
setTimeout
(()
=>
{
setTimeout
(()
=>
{
const
randomNumber
:
number
=
Math
.
random
();
const
randomNumber
:
number
=
Math
.
random
();
...
@@ -26,7 +26,7 @@ setTimeout(() => {
...
@@ -26,7 +26,7 @@ setTimeout(() => {
reject
(
new
Error
(
'
Random number is too small
'
));
reject
(
new
Error
(
'
Random number is too small
'
));
}
}
},
1000
);
},
1000
);
}
}
)
```
```
上述代码中,setTimeout函数模拟了一个异步操作,并在1秒钟后随机生成一个数字。如果随机数大于0.5,则执行resolve回调函数并将随机数作为参数传递;否则执行reject回调函数并传递一个错误对象作为参数。
上述代码中,setTimeout函数模拟了一个异步操作,并在1秒钟后随机生成一个数字。如果随机数大于0.5,则执行resolve回调函数并将随机数作为参数传递;否则执行reject回调函数并传递一个错误对象作为参数。
...
@@ -34,11 +34,13 @@ setTimeout(() => {
...
@@ -34,11 +34,13 @@ setTimeout(() => {
Promise对象创建后,可以使用then方法和catch方法指定fulfilled状态和rejected状态的回调函数。then方法可接受两个参数,一个处理fulfilled状态的函数,另一个处理rejected状态的函数。只传一个参数则表示状态改变就执行,不区分状态结果。使用catch方法注册一个回调函数,用于处理“失败”的结果,即捕获Promise的状态改变为rejected状态或操作失败抛出的异常。例如:
Promise对象创建后,可以使用then方法和catch方法指定fulfilled状态和rejected状态的回调函数。then方法可接受两个参数,一个处理fulfilled状态的函数,另一个处理rejected状态的函数。只传一个参数则表示状态改变就执行,不区分状态结果。使用catch方法注册一个回调函数,用于处理“失败”的结果,即捕获Promise的状态改变为rejected状态或操作失败抛出的异常。例如:
```
js
```
ts
promise
.
then
(
result
=>
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
console
.
info
(
`Random number is
${
result
}
`
);
}).
catch
(
error
=>
{
promise
.
then
((
result
:
number
)
=>
{
console
.
error
(
error
.
message
);
console
.
info
(
`Random number is
${
result
}
`
);
}).
catch
((
error
:
BusinessError
)
=>
{
console
.
error
(
error
.
message
);
});
});
```
```
...
@@ -54,7 +56,7 @@ async函数是一个返回Promise对象的函数,用于表示一个异步操
...
@@ -54,7 +56,7 @@ async函数是一个返回Promise对象的函数,用于表示一个异步操
下面是一个使用async/await的例子,其中模拟了一个异步操作,该操作会在3秒钟后返回一个字符串。
下面是一个使用async/await的例子,其中模拟了一个异步操作,该操作会在3秒钟后返回一个字符串。
```
j
s
```
t
s
async
function
myAsyncFunction
():
Promise
<
void
>
{
async
function
myAsyncFunction
():
Promise
<
void
>
{
const
result
:
string
=
await
new
Promise
((
resolve
:
Function
)
=>
{
const
result
:
string
=
await
new
Promise
((
resolve
:
Function
)
=>
{
setTimeout
(()
=>
{
setTimeout
(()
=>
{
...
@@ -72,7 +74,7 @@ myAsyncFunction();
...
@@ -72,7 +74,7 @@ myAsyncFunction();
需要注意的是,由于要等待异步操作完成,因此需要将整个操作包在async函数中。除了在async函数中使用await外,还可以使用try/catch块来捕获异步操作中的异常。
需要注意的是,由于要等待异步操作完成,因此需要将整个操作包在async函数中。除了在async函数中使用await外,还可以使用try/catch块来捕获异步操作中的异常。
```
j
s
```
t
s
async
function
myAsyncFunction
():
Promise
<
void
>
{
async
function
myAsyncFunction
():
Promise
<
void
>
{
try
{
try
{
const
result
:
string
=
await
new
Promise
((
resolve
:
Function
)
=>
{
const
result
:
string
=
await
new
Promise
((
resolve
:
Function
)
=>
{
...
...
zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md
浏览文件 @
8485a7ce
...
@@ -19,7 +19,6 @@ CPU密集型任务是指需要占用系统资源处理大量计算能力的任
...
@@ -19,7 +19,6 @@ CPU密集型任务是指需要占用系统资源处理大量计算能力的任
3.
结果数组汇总处理。
3.
结果数组汇总处理。
```
ts
```
ts
import
taskpool
from
'
@ohos.taskpool
'
;
import
taskpool
from
'
@ohos.taskpool
'
;
...
@@ -58,8 +57,8 @@ struct Index {
...
@@ -58,8 +57,8 @@ struct Index {
.
fontSize
(
50
)
.
fontSize
(
50
)
.
fontWeight
(
FontWeight
.
Bold
)
.
fontWeight
(
FontWeight
.
Bold
)
.
onClick
(()
=>
{
.
onClick
(()
=>
{
let
data
:
ArrayBuffer
;
let
buffer
:
ArrayBuffer
=
new
ArrayBuffer
(
24
)
;
histogramStatistic
(
data
);
histogramStatistic
(
buffer
);
})
})
}
}
.
width
(
'
100%
'
)
.
width
(
'
100%
'
)
...
@@ -80,107 +79,105 @@ struct Index {
...
@@ -80,107 +79,105 @@ struct Index {
2.
在主线程中通过调用ThreadWorker的
[
constructor()
](
../reference/apis/js-apis-worker.md#constructor9
)
方法创建Worker对象,当前线程为宿主线程。
2.
在主线程中通过调用ThreadWorker的
[
constructor()
](
../reference/apis/js-apis-worker.md#constructor9
)
方法创建Worker对象,当前线程为宿主线程。
```
j
s
```t
s
import
worker
from
'
@ohos.worker
'
;
import worker from '@ohos.worker';
const
workerInstance
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/MyWorker.ts
'
);
const workerInstance: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts');
```
```
3.
在宿主线程中通过调用
[
onmessage()
](
../reference/apis/js-apis-worker.md#onmessage9
)
方法接收Worker线程发送过来的消息,并通过调用
[
postMessage()
](
../reference/apis/js-apis-worker.md#postmessage9
)
方法向Worker线程发送消息。
3.
在宿主线程中通过调用
[
onmessage()
](
../reference/apis/js-apis-worker.md#onmessage9
)
方法接收Worker线程发送过来的消息,并通过调用
[
postMessage()
](
../reference/apis/js-apis-worker.md#postmessage9
)
方法向Worker线程发送消息。
例如向Worker线程发送训练和预测的消息,同时接收Worker线程发送回来的消息。
例如向Worker线程发送训练和预测的消息,同时接收Worker线程发送回来的消息。
```ts
```
js
import worker from '@ohos.worker';
// 接收Worker子线程的结果
workerInstance
.
onmessage
=
function
(
e
)
{
const workerInstance: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts');
// 接收Worker子线程的结果
workerInstance.onmessage = (() => {
console.info('MyWorker.ts onmessage');
console.info('MyWorker.ts onmessage');
// 在Worker线程中进行耗时操作
// 在Worker线程中进行耗时操作
}
})
workerInstance
.
onerror
=
function
(
d
)
{
workerInstance.onerror = (() =>
{
// 接收Worker子线程的错误信息
// 接收Worker子线程的错误信息
}
})
// 向Worker子线程发送训练消息
workerInstance.postMessage({ 'type': 0 });
// 向Worker子线程发送预测消息
workerInstance.postMessage({ 'type': 1, 'value': [90, 5] });
```
// 向Worker子线程发送训练消息
workerInstance
.
postMessage
({
'
type
'
:
0
});
// 向Worker子线程发送预测消息
workerInstance
.
postMessage
({
'
type
'
:
1
,
'
value
'
:
[
90
,
5
]
});
```
4.
在MyWorker.ts文件中绑定Worker对象,当前线程为Worker线程。
4.
在MyWorker.ts文件中绑定Worker对象,当前线程为Worker线程。
```
j
s
```
t
s
import
worker
,
{
ThreadWorkerGlobalScope
,
MessageEvents
,
ErrorEvent
}
from
'
@ohos.worker
'
;
import
worker
,
{
ThreadWorkerGlobalScope
,
MessageEvents
,
ErrorEvent
}
from
'
@ohos.worker
'
;
let
workerPort
:
ThreadWorkerGlobalScope
=
worker
.
workerPort
;
let
workerPort
:
ThreadWorkerGlobalScope
=
worker
.
workerPort
;
```
```
5.
在Worker线程中通过调用
[
onmessage()
](
../reference/apis/js-apis-worker.md#onmessage9-1
)
方法接收宿主线程发送的消息内容,并通过调用
[
postMessage()
](
../reference/apis/js-apis-worker.md#postmessage9-2
)
方法向宿主线程发送消息。
5.
在Worker线程中通过调用
[
onmessage()
](
../reference/apis/js-apis-worker.md#onmessage9-1
)
方法接收宿主线程发送的消息内容,并通过调用
[
postMessage()
](
../reference/apis/js-apis-worker.md#postmessage9-2
)
方法向宿主线程发送消息。
例如在Worker线程中定义预测模型及其训练过程,同时与主线程进行信息交互。
例如在Worker线程中定义预测模型及其训练过程,同时与主线程进行信息交互。
```ts
```
js
import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';
import
worker
,
{
ThreadWorkerGlobalScope
,
MessageEvents
,
ErrorEvent
}
from
'
@ohos.worker
'
;
let workerPort: ThreadWorkerGlobalScope = worker.workerPort;
// 定义训练模型及结果
let
workerPort
:
ThreadWorkerGlobalScope
=
worker
.
workerPort
;
let result: Array<number>;
// 定义预测函数
// 定义训练模型及结果
function predict(x: number): number {
let
result
;
// 定义预测函数
function
predict
(
x
)
{
return result[x];
return result[x];
}
}
// 定义优化器训练过程
// 定义优化器训练过程
function optimize(): void {
function
optimize
()
{
result = [];
result
=
{};
}
}
// Worker线程的onmessage逻辑
workerPort.onmessage = (e: MessageEvents): void => {
// Worker线程的onmessage逻辑
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// 根据传输的数据的type选择进行操作
// 根据传输的数据的type选择进行操作
switch
(
e
.
data
.
type
)
{
switch (e.data.type
as number
) {
case
0
:
case 0:
// 进行训练
// 进行训练
optimize
();
optimize();
// 训练之后发送主线程训练成功的消息
// 训练之后发送主线程训练成功的消息
workerPort
.
postMessage
({
type
:
'
message
'
,
value
:
'
train success.
'
});
workerPort.postMessage({ type: 'message', value: 'train success.' });
break
;
break;
case
1
:
case 1:
// 执行预测
// 执行预测
const
output
=
predict
(
e
.
data
.
value
);
const output: number = predict(e.data.value as number
);
// 发送主线程预测的结果
// 发送主线程预测的结果
workerPort
.
postMessage
({
type
:
'
predict
'
,
value
:
output
});
workerPort.postMessage({ type: 'predict', value: output });
break
;
break;
default
:
default:
workerPort
.
postMessage
({
type
:
'
message
'
,
value
:
'
send message is invalid
'
});
workerPort.postMessage({ type: 'message', value: 'send message is invalid' });
break
;
break;
}
}
}
}
```
```
6.
在Worker线程中完成任务之后,执行Worker线程销毁操作。销毁线程的方式主要有两种:根据需要可以在宿主线程中对Worker线程进行销毁;也可以在Worker线程中主动销毁Worker线程。
6.
在Worker线程中完成任务之后,执行Worker线程销毁操作。销毁线程的方式主要有两种:根据需要可以在宿主线程中对Worker线程进行销毁;也可以在Worker线程中主动销毁Worker线程。
在宿主线程中通过调用
[
onexit()
](
../reference/apis/js-apis-worker.md#onexit9
)
方法定义Worker线程销毁后的处理逻辑。
在宿主线程中通过调用[onexit()](../reference/apis/js-apis-worker.md#onexit9)方法定义Worker线程销毁后的处理逻辑。
```
j
s
```t
s
// Worker线程销毁后,执行onexit回调方法
// Worker线程销毁后,执行onexit回调方法
workerInstance
.
onexit
=
function
()
{
workerInstance.onexit = (): void =>
{
console.info("main thread terminate");
console.info("main thread terminate");
}
}
```
```
方式一:在宿主线程中通过调用
[
terminate()
](
../reference/apis/js-apis-worker.md#terminate9
)
方法销毁Worker线程,并终止Worker接收消
息。
方式一:在宿主线程中通过调用[terminate()](../reference/apis/js-apis-worker.md#terminate9)方法销毁Worker线程,并终止Worker接收
息。
```
j
s
```t
s
// 销毁Worker线程
// 销毁Worker线程
workerInstance
.
terminate
();
workerInstance.terminate();
```
```
方式二:在Worker线程中通过调用
[
close()
](
../reference/apis/js-apis-worker.md#close9
)
方法主动销毁Worker线程,并终止Worker接收消息。
方式二:在Worker线程中通过调用[close()](../reference/apis/js-apis-worker.md#close9)方法主动销毁Worker线程,并终止Worker接收消息。
```
j
s
```t
s
// 销毁线程
// 销毁线程
workerPort
.
close
();
workerPort.close();
```
```
\ No newline at end of file
zh-cn/application-dev/arkts-utils/io-intensive-task-development.md
浏览文件 @
8485a7ce
...
@@ -8,46 +8,49 @@ I/O密集型任务的性能重点通常不在于CPU的处理能力,而在于I/
...
@@ -8,46 +8,49 @@ I/O密集型任务的性能重点通常不在于CPU的处理能力,而在于I/
1.
定义并发函数,内部密集调用I/O能力。
1.
定义并发函数,内部密集调用I/O能力。
```
ts
```
ts
// a.ts
import
fs
from
'
@ohos.file.fs
'
;
import
fs
from
'
@ohos.file.fs
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
// 定义并发函数,内部密集调用I/O能力
// 定义并发函数,内部密集调用I/O能力
// 写入文件的实现
// 写入文件的实现
export
async
function
write
(
data
:
string
,
filePath
:
string
):
Promise
<
void
>
{
async
function
write
(
data
:
string
,
filePath
:
string
):
Promise
<
void
>
{
let
file
:
fs
.
File
=
await
fs
.
open
(
filePath
,
fs
.
OpenMode
.
READ_WRITE
);
let
file
:
fs
.
File
=
await
fs
.
open
(
filePath
,
fs
.
OpenMode
.
READ_WRITE
);
await
fs
.
write
(
file
.
fd
,
data
);
await
fs
.
write
(
file
.
fd
,
data
);
fs
.
close
(
file
);
fs
.
close
(
file
);
}
}
```
@
Concurrent
```ts
async
function
concurrentTest
(
fileList
:
string
[]):
Promise
<
boolean
>
{
import { write } from './a'
// 循环写文件操作
import { BusinessError } from '@ohos.base';
for
(
let
i
:
number
=
0
;
i
<
fileList
.
length
;
i
++
)
{
write
(
'
Hello World!
'
,
fileList
[
i
]).
then
(()
=>
{
@Concurrent
console
.
info
(
`Succeeded in writing the file. FileList:
${
fileList
[
i
]}
`
);
async function concurrentTest(fileList: string[]): Promise<boolean> {
}).
catch
((
err
:
BusinessError
)
=>
{
// 循环写文件操作
console
.
error
(
`Failed to write the file. Code is
${
err
.
code
}
, message is
${
err
.
message
}
`
)
for (let i: number = 0; i < fileList.length; i++) {
return
false
;
write('Hello World!', fileList[i]).then(() => {
})
console.info(`Succeeded in writing the file. FileList: ${fileList[i]}`);
}).catch((err: BusinessError) => {
console.error(`Failed to write the file. Code is ${err.code}, message is ${err.message}`)
return false;
})
}
return true;
}
}
return
true
;
```
}
```
2.
使用TaskPool执行包含密集I/O的并发函数:通过调用
[
execute()
](
../reference/apis/js-apis-taskpool.md#taskpoolexecute
)
方法执行任务,并在回调中进行调度结果处理。示例中的filePath1和filePath2的获取方式请参见
[
获取应用文件路径
](
../application-models/application-context-stage.md#获取应用文件路径
)
。
2.
使用TaskPool执行包含密集I/O的并发函数:通过调用
[
execute()
](
../reference/apis/js-apis-taskpool.md#taskpoolexecute
)
方法执行任务,并在回调中进行调度结果处理。示例中的filePath1和filePath2的获取方式请参见
[
获取应用文件路径
](
../application-models/application-context-stage.md#获取应用文件路径
)
。
```
ts
```ts
import
taskpool
from
'
@ohos.taskpool
'
;
import taskpool from '@ohos.taskpool';
let
filePath1
:
string
=
...;
// 应用文件路径
let filePath1: string = "path1"; // 应用文件路径
let
filePath2
:
string
=
...;
let filePath2: string = "path2";
// 使用TaskPool执行包含密集I/O的并发函数
// 使用TaskPool执行包含密集I/O的并发函数
// 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力
// 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力
taskpool
.
execute
(
concurrentTest
,
[
filePath1
,
filePath2
]).
then
(()
=>
{
taskpool.execute(concurrentTest, [filePath1, filePath2]).then(() => {
// 调度结果处理
// 调度结果处理
console
.
info
(
`The result:
${
ret
}
`
);
})
})
```
```
zh-cn/application-dev/arkts-utils/linear-container.md
浏览文件 @
8485a7ce
...
@@ -198,7 +198,7 @@ Stack进行增、删、改、查操作的常用API如下:
...
@@ -198,7 +198,7 @@ Stack进行增、删、改、查操作的常用API如下:
此处列举常用的线性容器ArrayList、Vector、Deque、Stack、List的使用示例,包括导入模块、增加元素、访问元素及修改等操作。示例代码如下所示:
此处列举常用的线性容器ArrayList、Vector、Deque、Stack、List的使用示例,包括导入模块、增加元素、访问元素及修改等操作。示例代码如下所示:
```
j
s
```
t
s
// ArrayList
// ArrayList
import
ArrayList
from
'
@ohos.util.ArrayList
'
;
// 导入ArrayList模块
import
ArrayList
from
'
@ohos.util.ArrayList
'
;
// 导入ArrayList模块
...
...
zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md
浏览文件 @
8485a7ce
...
@@ -27,7 +27,7 @@ Actor并发模型作为基于消息通信并发模型的典型代表,不需要
...
@@ -27,7 +27,7 @@ Actor并发模型作为基于消息通信并发模型的典型代表,不需要
可转移对象(Transferable object)传输采用地址转移进行序列化,不需要内容拷贝,会将ArrayBuffer的所有权转移给接收该ArrayBuffer的线程,转移后该ArrayBuffer在发送它的线程中变为不可用,不允许再访问。
可转移对象(Transferable object)传输采用地址转移进行序列化,不需要内容拷贝,会将ArrayBuffer的所有权转移给接收该ArrayBuffer的线程,转移后该ArrayBuffer在发送它的线程中变为不可用,不允许再访问。
```
j
s
```
t
s
// 定义可转移对象
// 定义可转移对象
let
buffer
:
ArrayBuffer
=
new
ArrayBuffer
(
100
);
let
buffer
:
ArrayBuffer
=
new
ArrayBuffer
(
100
);
```
```
...
@@ -42,7 +42,7 @@ let buffer: ArrayBuffer = new ArrayBuffer(100);
...
@@ -42,7 +42,7 @@ let buffer: ArrayBuffer = new ArrayBuffer(100);
SharedArrayBuffer对象存储的数据在同时被修改时,需要通过原子操作保证其同步性,即下个操作开始之前务必需要等到上个操作已经结束。
SharedArrayBuffer对象存储的数据在同时被修改时,需要通过原子操作保证其同步性,即下个操作开始之前务必需要等到上个操作已经结束。
```
j
s
```
t
s
// 定义可共享对象,可以使用Atomics进行操作
// 定义可共享对象,可以使用Atomics进行操作
let
sharedBuffer
:
SharedArrayBuffer
=
new
SharedArrayBuffer
(
1024
);
let
sharedBuffer
:
SharedArrayBuffer
=
new
SharedArrayBuffer
(
1024
);
```
```
...
...
zh-cn/application-dev/arkts-utils/nonlinear-container.md
浏览文件 @
8485a7ce
...
@@ -212,7 +212,7 @@ PlainArray进行增、删、改、查操作的常用API如下:
...
@@ -212,7 +212,7 @@ PlainArray进行增、删、改、查操作的常用API如下:
此处列举常用的非线性容器HashMap、TreeMap、LightWeightMap、PlainArray的使用示例,包括导入模块、增加元素、访问元素及修改等操作,示例代码如下所示:
此处列举常用的非线性容器HashMap、TreeMap、LightWeightMap、PlainArray的使用示例,包括导入模块、增加元素、访问元素及修改等操作,示例代码如下所示:
```
j
s
```
t
s
// HashMap
// HashMap
import
HashMap
from
'
@ohos.util.HashMap
'
;
// 导入HashMap模块
import
HashMap
from
'
@ohos.util.HashMap
'
;
// 导入HashMap模块
...
...
zh-cn/application-dev/arkts-utils/single-io-development.md
浏览文件 @
8485a7ce
...
@@ -6,25 +6,23 @@ Promise和async/await提供异步并发能力,适用于单次I/O任务的场
...
@@ -6,25 +6,23 @@ Promise和async/await提供异步并发能力,适用于单次I/O任务的场
1.
实现单次I/O任务逻辑。
1.
实现单次I/O任务逻辑。
```
js
```ts
import
fs
from
'
@ohos.file.fs
'
;
import fs from '@ohos.file.fs';
import
{
BusinessError
}
from
'
@ohos.base
'
;
import { BusinessError } from '@ohos.base';
async function write(data: string, filePath: string): Promise<void> {
async
function
write
(
data
:
string
,
filePath
:
string
):
Promise
<
void
>
{
let file: fs.File = await fs.open(filePath, fs.OpenMode.READ_WRITE);
let
file
:
fs
.
File
=
await
fs
.
open
(
filePath
,
fs
.
OpenMode
.
READ_WRITE
);
fs.write(file.fd, data).then((writeLen: number) => {
fs
.
write
(
file
.
fd
,
data
).
then
((
writeLen
:
number
)
=>
{
fs.close(file);
fs
.
close
(
file
);
}).catch((err: BusinessError) => {
}).
catch
((
err
:
BusinessError
)
=>
{
console.error(`Failed to write data. Code is ${err.code}, message is ${err.message}`);
console
.
error
(
`Failed to write data. Code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
})
})
}
}
```
```
2.
采用异步能力调用单次I/O任务。示例中的filePath的获取方式请参见
[
获取应用文件路径
](
../application-models/application-context-stage.md#获取应用文件路径
)
。
2.
采用异步能力调用单次I/O任务。示例中的filePath的获取方式请参见
[
获取应用文件路径
](
../application-models/application-context-stage.md#获取应用文件路径
)
。
```
j
s
```t
s
let
filePath
:
string
=
...
;
// 应用文件路径
let filePath: string = "path"
; // 应用文件路径
write
(
'
Hello World!
'
,
filePath
).
then
(()
=>
{
write('Hello World!', filePath).then(() => {
console
.
info
(
'
Succeeded in writing data.
'
);
console.info('Succeeded in writing data.');
})
})
```
```
zh-cn/application-dev/arkts-utils/sync-task-development.md
浏览文件 @
8485a7ce
...
@@ -39,6 +39,7 @@ export default class Handle {
...
@@ -39,6 +39,7 @@ export default class Handle {
}
}
```
```
业务使用TaskPool调用相关同步方法的代码。
业务使用TaskPool调用相关同步方法的代码。
...
@@ -52,8 +53,6 @@ import Handle from './Handle'; // 返回静态句柄
...
@@ -52,8 +53,6 @@ import Handle from './Handle'; // 返回静态句柄
function
func
(
num
:
number
):
boolean
{
function
func
(
num
:
number
):
boolean
{
// 调用静态类对象中实现的同步等待调用
// 调用静态类对象中实现的同步等待调用
Handle
.
syncSet
(
num
);
Handle
.
syncSet
(
num
);
// 或者调用单例对象中实现的同步等待调用
Handle
.
getInstance
().
syncGet
();
return
true
;
return
true
;
}
}
...
@@ -95,75 +94,76 @@ struct Index {
...
@@ -95,75 +94,76 @@ struct Index {
1.
在主线程中创建Worker对象,同时接收Worker线程发送回来的消息。
1.
在主线程中创建Worker对象,同时接收Worker线程发送回来的消息。
```
j
s
```t
s
import
worker
from
'
@ohos.worker
'
;
import worker from '@ohos.worker';
@
Entry
@Entry
@
Component
@Component
struct
Index
{
struct Index {
@
State
message
:
string
=
'
Hello World
'
;
@State message: string = 'Hello World';
build
()
{
build() {
Row
()
{
Row() {
Column
()
{
Column() {
Text
(
this
.
message
)
Text(this.message)
.
fontSize
(
50
)
.fontSize(50)
.
fontWeight
(
FontWeight
.
Bold
)
.fontWeight(FontWeight.Bold)
.
onClick
(()
=>
{
.onClick(() => {
let
w
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/MyWorker.ts
'
);
let w: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts');
w
.
onmessage
=
function
(
d
)
{
w.onmessage = () =>
{
// 接收Worker子线程的结果
// 接收Worker子线程的结果
}
}
w
.
onerror
=
function
(
d
)
{
w.onerror = () =>
{
// 接收Worker子线程的错误信息
// 接收Worker子线程的错误信息
}
}
// 向Worker子线程发送Set消息
// 向Worker子线程发送Set消息
w
.
postMessage
({
'
type
'
:
0
,
'
data
'
:
'
data
'
})
w.postMessage({'type': 0, 'data': 'data'})
// 向Worker子线程发送Get消息
// 向Worker子线程发送Get消息
w
.
postMessage
({
'
type
'
:
1
})
w.postMessage({'type': 1})
// 销毁线程
// 销毁线程
w
.
terminate
()
w.terminate()
})
})
}
}
.
width
(
'
100%
'
)
.width('100%')
}
}
.
height
(
'
100%
'
)
.height('100%')
}
}
}
}
```
```
2.
在Worker线程中绑定Worker对象,同时处理同步任务逻辑。
```
js
2.
在Worker线程中绑定Worker对象,同时处理同步任务逻辑。
// handle.ts代码
export
default
class
Handle
{
syncGet
()
{
return
;
}
syncSet
(
num
:
number
)
{
```ts
return
;
// handle.ts代码
}
export default class Handle {
}
syncGet() {
return;
// Worker.ts代码
}
import
worker
,
{
ThreadWorkerGlobalScope
,
MessageEvents
}
from
'
@ohos.worker
'
;
import
Handle
from
'
./handle.ts
'
// 返回句柄
syncSet(num: number) {
return;
var
workerPort
:
ThreadWorkerGlobalScope
=
worker
.
workerPort
;
}
}
// 无法传输的句柄,所有操作依赖此句柄
var
handler
=
new
Handle
()
// Worker.ts代码
import worker, { ThreadWorkerGlobalScope, MessageEvents } from '@ohos.worker';
// Worker线程的onmessage逻辑
import Handle from './handle.ts' // 返回句柄
workerPort
.
onmessage
=
function
(
e
:
MessageEvents
)
{
switch
(
e
.
data
.
type
)
{
var workerPort : ThreadWorkerGlobalScope = worker.workerPort;
case
0
:
handler
.
syncSet
(
e
.
data
.
data
);
// 无法传输的句柄,所有操作依赖此句柄
workerPort
.
postMessage
(
'
success set
'
);
var handler = new Handle()
case
1
:
handler
.
syncGet
();
// Worker线程的onmessage逻辑
workerPort
.
postMessage
(
'
success get
'
);
workerPort.onmessage = (e : MessageEvents): void => {
switch (e.data.type as number) {
case 0:
handler.syncSet(e.data.data);
workerPort.postMessage('success set');
case 1:
handler.syncGet();
workerPort.postMessage('success get');
}
}
}
}
```
```
zh-cn/application-dev/arkts-utils/taskpool-vs-worker.md
浏览文件 @
8485a7ce
...
@@ -100,23 +100,21 @@ TaskPool支持开发者在主线程封装任务抛给任务队列,系统选择
...
@@ -100,23 +100,21 @@ TaskPool支持开发者在主线程封装任务抛给任务队列,系统选择
当使用Worker模块具体功能时,均需先构造Worker实例对象,其构造函数与API版本相关。
当使用Worker模块具体功能时,均需先构造Worker实例对象,其构造函数与API版本相关。
```
j
s
```
t
s
// API 9及之后版本使用:
// API 9及之后版本使用:
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
scriptURL
);
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/MyWorker.ts
'
);
// API 8及之前版本使用:
// API 8及之前版本使用:
const
worker
1
:
worker
.
ThreadWorker
=
new
worker
.
Worker
(
scriptURL
);
const
worker
2
:
worker
.
Worker
=
new
worker
.
Worker
(
'
entry/ets/workers/MyWorker.ts
'
);
```
```
构造函数需要传入Worker的路径(scriptURL),Worker文件存放位置默认路径为Worker文件所在目录与pages目录属于同级。
构造函数需要传入Worker的路径(scriptURL),Worker文件存放位置默认路径为Worker文件所在目录与pages目录属于同级。
**Stage模型**
**Stage模型**
构造函数中的scriptURL示例如下:
构造函数中的scriptURL示例如下:
```
ts
```
js
// 写法一
// 写法一
// Stage模型-目录同级(entry模块下,workers目录与pages目录同级)
// Stage模型-目录同级(entry模块下,workers目录与pages目录同级)
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/MyWorker.ts
'
,
{
name
:
"
first worker in Stage model
"
});
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
entry/ets/workers/MyWorker.ts
'
,
{
name
:
"
first worker in Stage model
"
});
...
@@ -149,7 +147,7 @@ const worker4: worker.ThreadWorker = new worker.ThreadWorker('@bundle:com.exampl
...
@@ -149,7 +147,7 @@ const worker4: worker.ThreadWorker = new worker.ThreadWorker('@bundle:com.exampl
构造函数中的scriptURL示例如下:
构造函数中的scriptURL示例如下:
```
j
s
```
t
s
// FA模型-目录同级(entry模块下,workers目录与pages目录同级)
// FA模型-目录同级(entry模块下,workers目录与pages目录同级)
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
workers/worker.js
'
,
{
name
:
'
first worker in FA model
'
});
const
worker1
:
worker
.
ThreadWorker
=
new
worker
.
ThreadWorker
(
'
workers/worker.js
'
,
{
name
:
'
first worker in FA model
'
});
// FA模型-目录不同级(entry模块下,workers目录与pages目录的父目录同级)
// FA模型-目录不同级(entry模块下,workers目录与pages目录的父目录同级)
...
...
zh-cn/application-dev/arkts-utils/xml-conversion.md
浏览文件 @
8485a7ce
...
@@ -18,15 +18,15 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
...
@@ -18,15 +18,15 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
1.
引入模块。
1.
引入模块。
```
j
s
```
t
s
import
convertxml
from
'
@ohos.convertxml
'
;
import
convertxml
from
'
@ohos.convertxml
'
;
```
```
2.
输入待转换的XML,设置转换选项。
2.
输入待转换的XML,设置转换选项。
```
j
s
```
t
s
let
xml
:
string
=
let
xml
:
string
=
'
<?xml version="1.0" encoding="utf-8"?>
'
+
'
<?xml version="1.0" encoding="utf-8"?>
'
+
'
<note importance="high" logged="true">
'
+
'
<note importance="high" logged="true">
'
+
'
<title>Happy</title>
'
+
'
<title>Happy</title>
'
+
'
<todo>Work</todo>
'
+
'
<todo>Work</todo>
'
+
...
@@ -62,7 +62,7 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
...
@@ -62,7 +62,7 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
3.
调用转换函数,打印结果。
3.
调用转换函数,打印结果。
```
j
s
```
t
s
let
conv
:
convertxml
.
ConvertXML
=
new
convertxml
.
ConvertXML
();
let
conv
:
convertxml
.
ConvertXML
=
new
convertxml
.
ConvertXML
();
let
result
:
object
=
conv
.
convertToJSObject
(
xml
,
options
);
let
result
:
object
=
conv
.
convertToJSObject
(
xml
,
options
);
let
strRes
:
string
=
JSON
.
stringify
(
result
);
// 将js对象转换为json字符串,用于显式输出
let
strRes
:
string
=
JSON
.
stringify
(
result
);
// 将js对象转换为json字符串,用于显式输出
...
@@ -71,7 +71,6 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
...
@@ -71,7 +71,6 @@ XML解析及转换需要确保传入的XML数据符合标准格式。
输出结果如下所示:
输出结果如下所示:
```
js
```
js
strRes
:
strRes
:
{
"
_declaration
"
:{
"
_attributes
"
:{
"
version
"
:
"
1.0
"
,
"
encoding
"
:
"
utf-8
"
}},
"
_elements
"
:[{
"
_type
"
:
"
element
"
,
"
_name
"
:
"
note
"
,
{
"
_declaration
"
:{
"
_attributes
"
:{
"
version
"
:
"
1.0
"
,
"
encoding
"
:
"
utf-8
"
}},
"
_elements
"
:[{
"
_type
"
:
"
element
"
,
"
_name
"
:
"
note
"
,
...
...
zh-cn/application-dev/arkts-utils/xml-generation.md
浏览文件 @
8485a7ce
...
@@ -24,14 +24,14 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
...
@@ -24,14 +24,14 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
1.
引入模块。
1.
引入模块。
```
j
s
```
t
s
import
xml
from
'
@ohos.xml
'
;
import
xml
from
'
@ohos.xml
'
;
import
util
from
'
@ohos.util
'
;
import
util
from
'
@ohos.util
'
;
```
```
2.
创建缓冲区,构造XmlSerializer对象(可以基于Arraybuffer构造XmlSerializer对象, 也可以基于DataView构造XmlSerializer对象)。
2.
创建缓冲区,构造XmlSerializer对象(可以基于Arraybuffer构造XmlSerializer对象, 也可以基于DataView构造XmlSerializer对象)。
```
j
s
```
t
s
// 1.基于Arraybuffer构造XmlSerializer对象
// 1.基于Arraybuffer构造XmlSerializer对象
let
arrayBuffer
:
ArrayBuffer
=
new
ArrayBuffer
(
2048
);
// 创建一个2048字节的缓冲区
let
arrayBuffer
:
ArrayBuffer
=
new
ArrayBuffer
(
2048
);
// 创建一个2048字节的缓冲区
let
thatSer
:
xml
.
XmlSerializer
=
new
xml
.
XmlSerializer
(
arrayBuffer
);
// 基于Arraybuffer构造XmlSerializer对象
let
thatSer
:
xml
.
XmlSerializer
=
new
xml
.
XmlSerializer
(
arrayBuffer
);
// 基于Arraybuffer构造XmlSerializer对象
...
@@ -44,7 +44,7 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
...
@@ -44,7 +44,7 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
3.
调用XML元素生成函数。
3.
调用XML元素生成函数。
```
j
s
```
t
s
thatSer
.
setDeclaration
();
// 写入xml的声明
thatSer
.
setDeclaration
();
// 写入xml的声明
thatSer
.
startElement
(
'
bookstore
'
);
// 写入元素开始标记
thatSer
.
startElement
(
'
bookstore
'
);
// 写入元素开始标记
thatSer
.
startElement
(
'
book
'
);
// 嵌套元素开始标记
thatSer
.
startElement
(
'
book
'
);
// 嵌套元素开始标记
...
@@ -65,7 +65,7 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
...
@@ -65,7 +65,7 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
4.
使用Uint8Array操作Arraybuffer,调用TextDecoder对Uint8Array解码后输出。
4.
使用Uint8Array操作Arraybuffer,调用TextDecoder对Uint8Array解码后输出。
```
j
s
```
t
s
let
view
:
Uint8Array
=
new
Uint8Array
(
arrayBuffer
);
// 使用Uint8Array读取arrayBuffer的数据
let
view
:
Uint8Array
=
new
Uint8Array
(
arrayBuffer
);
// 使用Uint8Array读取arrayBuffer的数据
let
textDecoder
:
util
.
TextDecoder
=
util
.
TextDecoder
.
create
();
// 调用util模块的TextDecoder类
let
textDecoder
:
util
.
TextDecoder
=
util
.
TextDecoder
.
create
();
// 调用util模块的TextDecoder类
let
res
:
string
=
textDecoder
.
decodeWithStream
(
view
);
// 对view解码
let
res
:
string
=
textDecoder
.
decodeWithStream
(
view
);
// 对view解码
...
@@ -74,7 +74,6 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
...
@@ -74,7 +74,6 @@ XML模块的API接口可以参考[@ohos.xml](../reference/apis/js-apis-xml.md)
输出结果如下:
输出结果如下:
```
```
js
<?xml version=\"1.0\" encoding=\"utf-8\"?><bookstore>\r\n <book category=\"COOKING\">\r\n <title lang=\"en\">Everyday</title>\r\n <author>Giada</author>\r\n <year>2005</year>\r\n </book>\r\n</bookstore>
<?xml version=\"1.0\" encoding=\"utf-8\"?><bookstore>\r\n <book category=\"COOKING\">\r\n <title lang=\"en\">Everyday</title>\r\n <author>Giada</author>\r\n <year>2005</year>\r\n </book>\r\n</bookstore>
```
```
zh-cn/application-dev/arkts-utils/xml-parsing.md
浏览文件 @
8485a7ce
...
@@ -29,111 +29,109 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
...
@@ -29,111 +29,109 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
1.
引入模块。
1.
引入模块。
```
j
s
```t
s
import
xml
from
'
@ohos.xml
'
;
import xml from '@ohos.xml';
import
util
from
'
@ohos.util
'
;
// 需要使用util模块函数对文件编码
import util from '@ohos.util'; // 需要使用util模块函数对文件编码
```
```
2.
对XML文件编码后调用XmlPullParser。
2.
对XML文件编码后调用XmlPullParser。
可以基于ArrayBuffer构造XmlPullParser对象, 也可以基于DataView构造XmlPullParser对象。
可以基于ArrayBuffer构造XmlPullParser对象, 也可以基于DataView构造XmlPullParser对象。
```ts
```
js
let strXml: string =
let
strXml
:
string
=
'<?xml version="1.0" encoding="utf-8"?>' +
'
<?xml version="1.0" encoding="utf-8"?>
'
+
'<note importance="high" logged="true">' +
'
<note importance="high" logged="true">
'
+
'<title>Play</title>' +
'
<title>Play</title>
'
+
'<lens>Work</lens>' +
'
<lens>Work</lens>
'
+
'</note>';
'
</note>
'
;
let textEncoder: util.TextEncoder = new util.TextEncoder();
let
textEncoder
:
util
.
TextEncoder
=
new
util
.
TextEncoder
();
let arrBuffer: Uint8Array = textEncoder.encodeInto(strXml); // 对数据编码,防止包含中文字符乱码
let
arrBuffer
:
Uint8Array
=
textEncoder
.
encodeInto
(
strXml
);
// 对数据编码,防止包含中文字符乱码
// 1.基于ArrayBuffer构造XmlPullParser对象
// 1.基于ArrayBuffer构造XmlPullParser对象
let that: xml.XmlPullParser = new xml.XmlPullParser(arrBuffer.buffer, 'UTF-8');
let
that
:
xml
.
XmlPullParser
=
new
xml
.
XmlPullParser
(
arrBuffer
.
buffer
,
'
UTF-8
'
);
// 2.基于DataView构造XmlPullParser对象
// 2.基于DataView构造XmlPullParser对象
let dataView: DataView = new DataView(arrBuffer.buffer);
let
dataView
:
DataView
=
new
DataView
(
arrBuffer
.
buffer
);
let that: xml.XmlPullParser = new xml.XmlPullParser(dataView, 'UTF-8');
let
that
:
xml
.
XmlPullParser
=
new
xml
.
XmlPullParser
(
dataView
,
'
UTF-8
'
);
```
```
3. 自定义回调函数,本例直接打印出标签及标签值。
3. 自定义回调函数,本例直接打印出标签及标签值。
```
j
s
```
t
s
let
str
:
string
=
''
;
let str: string = '';
function
func
(
name
:
string
,
value
:
string
):
boolean
{
function func(name: string, value: string): boolean {
str
=
name
+
value
;
str = name + value;
console
.
info
(
str
);
console.info(str);
return
true
;
//true:继续解析 false:停止解析
return true; //true:继续解析 false:停止解析
}
}
```
```
4. 设置解析选项,调用parse函数。
4. 设置解析选项,调用parse函数。
```
j
s
```
t
s
let
options
:
xml
.
ParseOptions
=
{
supportDoctype
:
true
,
ignoreNameSpace
:
true
,
tagValueCallbackFunction
:
func
};
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tagValueCallbackFunction:func};
that
.
parse
(
options
);
that.parse(options);
```
```
输出结果如下所示:
输出结果如下所示:
```
note
title
Play
title
lens
Work
lens
note
```
```
js
note
title
Play
title
lens
Work
lens
note
```
## 解析XML属性和属性值
## 解析XML属性和属性值
1. 引入模块。
1. 引入模块。
```
j
s
```
t
s
import
xml
from
'
@ohos.xml
'
;
import xml from '@ohos.xml';
import
util
from
'
@ohos.util
'
;
// 需要使用util模块函数对文件编码
import util from '@ohos.util'; // 需要使用util模块函数对文件编码
```
```
2. 对XML文件编码后调用XmlPullParser。
2. 对XML文件编码后调用XmlPullParser。
```
j
s
```
t
s
let
strXml
:
string
=
let strXml: string =
'
<?xml version="1.0" encoding="utf-8"?>
'
+
'
<?xml version="1.0" encoding="utf-8"?>
' +
'
<note importance="high" logged="true">
'
+
'
<note
importance=
"high"
logged=
"true"
>
' +
'
<title>Play</title>
'
+
'
<title>
Play
</title>
' +
'
<title>Happy</title>
'
+
'
<title>
Happy
</title>
' +
'
<lens>Work</lens>
'
+
'
<lens>
Work
</lens>
' +
'
</note>
'
;
'
</note>
';
let
textEncoder
:
util
.
TextEncoder
=
new
util
.
TextEncoder
();
let textEncoder: util.TextEncoder = new util.TextEncoder();
let
arrBuffer
:
Uint8Array
=
textEncoder
.
encodeInto
(
strXml
);
// 对数据编码,防止包含中文字符乱码
let arrBuffer: Uint8Array = textEncoder.encodeInto(strXml); // 对数据编码,防止包含中文字符乱码
let
that
:
xml
.
XmlPullParser
=
new
xml
.
XmlPullParser
(
arrBuffer
.
buffer
,
'
UTF-8
'
);
let that: xml.XmlPullParser = new xml.XmlPullParser(arrBuffer.buffer, 'UTF-8');
```
```
3. 自定义回调函数,本例直接打印出属性及属性值。
3. 自定义回调函数,本例直接打印出属性及属性值。
```
j
s
```
t
s
let
str
:
string
=
''
;
let str: string = '';
function
func
(
name
:
string
,
value
:
string
):
boolean
{
function func(name: string, value: string): boolean {
str
+=
name
+
'
'
+
value
+
'
'
;
str += name + ' ' + value + ' ';
return
true
;
// true:继续解析 false:停止解析
return true; // true:继续解析 false:停止解析
}
}
```
```
4. 设置解析选项,调用parse函数。
4. 设置解析选项,调用parse函数。
```
j
s
```
t
s
let
options
:
xml
.
ParseOptions
=
{
supportDoctype
:
true
,
ignoreNameSpace
:
true
,
attributeValueCallbackFunction
:
func
};
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, attributeValueCallbackFunction:func};
that
.
parse
(
options
);
that.parse(options);
console
.
info
(
str
);
// 一次打印出所有的属性及其值
console.info(str); // 一次打印出所有的属性及其值
```
```
输出结果如下所示:
输出结果如下所示:
```
```
js
importance high logged true // note节点的属性及属性值
importance high logged true // note节点的属性及属性值
```
```
...
@@ -142,54 +140,55 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
...
@@ -142,54 +140,55 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
1. 引入模块。
1. 引入模块。
```
j
s
```
t
s
import
xml
from
'
@ohos.xml
'
;
import xml from '@ohos.xml';
import
util
from
'
@ohos.util
'
;
// 需要使用util模块函数对文件编码
import util from '@ohos.util'; // 需要使用util模块函数对文件编码
```
```
2. 对XML文件编码后调用XmlPullParser。
2. 对XML文件编码后调用XmlPullParser。
```
j
s
```
t
s
let
strXml
:
string
=
let strXml: string =
'
<?xml version="1.0" encoding="utf-8"?>
'
+
'
<?xml version="1.0" encoding="utf-8"?>
' +
'
<note importance="high" logged="true">
'
+
'
<note
importance=
"high"
logged=
"true"
>
' +
'
<title>Play</title>
'
+
'
<title>
Play
</title>
' +
'
</note>
'
;
'
</note>
';
let
textEncoder
:
util
.
TextEncoder
=
new
util
.
TextEncoder
();
let textEncoder: util.TextEncoder = new util.TextEncoder();
let
arrBuffer
:
Uint8Array
=
textEncoder
.
encodeInto
(
strXml
);
// 对数据编码,防止包含中文字符乱码
let arrBuffer: Uint8Array = textEncoder.encodeInto(strXml); // 对数据编码,防止包含中文字符乱码
let
that
:
xml
.
XmlPullParser
=
new
xml
.
XmlPullParser
(
arrBuffer
.
buffer
,
'
UTF-8
'
);
let that: xml.XmlPullParser = new xml.XmlPullParser(arrBuffer.buffer, 'UTF-8');
```
```
3. 自定义回调函数,本例直接打印元素事件类型及元素深度。
3. 自定义回调函数,本例直接打印元素事件类型及元素深度。
```
j
s
```
t
s
let
str
:
string
=
''
;
let str: string = '';
function
func
(
name
:
string
,
value
:
xml
.
ParseInfo
):
boolean
{
function func(name: xml.EventType
, value: xml.ParseInfo): boolean {
str
=
name
+
'
'
+
value
.
getDepth
();
// getDepth 获取元素的当前深度
str = name + ' ' + value.getDepth(); // getDepth 获取元素的当前深度
console
.
info
(
str
)
console.info(str)
return
true
;
//true:继续解析 false:停止解析
return true; //true:继续解析 false:停止解析
}
}
```
```
4. 设置解析选项,调用parse函数。
4. 设置解析选项,调用parse函数。
```
j
s
```
t
s
let
options
:
xml
.
ParseOptions
=
{
supportDoctype
:
true
,
ignoreNameSpace
:
true
,
tokenValueCallbackFunction
:
func
};
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func};
that
.
parse
(
options
);
that.parse(options);
```
```
输出结果如下所示:
输出结果如下所示:
```
0 0 // 0:
<?xml version="1.0" encoding="utf-8"?>
对应事件类型 START_DOCUMENT值为0 0:起始深度为0
2 1 // 2:
<note
importance=
"high"
logged=
"true"
>
对应事件类型START_TAG值为2 1:深度为1
2 2 // 2:
<title>
对应事件类型START_TAG值为2 2:深度为2
4 2 // 4:Play对应事件类型TEXT值为4 2:深度为2
3 2 // 3:
</title>
对应事件类型END_TAG值为3 2:深度为2
3 1 // 3:
</note>
对应事件类型END_TAG值为3 1:深度为1(与
<note对应>
)
1 0 // 1:对应事件类型END_DOCUMENT值为1 0:深度为0
```
```
js
0
0
// 0:<?xml version="1.0" encoding="utf-8"?> 对应事件类型START_DOCUMENT值为0 0:起始深度为0
2
1
// 2:<note importance="high" logged="true"> 对应事件类型START_TAG值为2 1:深度为1
2
2
// 2:<title>对应事件类型START_TAG值为2 2:深度为2
4
2
// 4:Play对应事件类型TEXT值为4 2:深度为2
3
2
// 3:</title>对应事件类型END_TAG值为3 2:深度为2
3
1
// 3:</note>对应事件类型END_TAG值为3 1:深度为1(与<note对应>)
1
0
// 1:对应事件类型END_DOCUMENT值为1 0:深度为0
```
## 场景示例
## 场景示例
...
@@ -197,7 +196,7 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
...
@@ -197,7 +196,7 @@ XML模块提供XmlPullParser类对XML文件解析,输入为含有XML文本的A
此处以调用所有解析选项为例,提供解析XML标签、属性和事件类型的开发示例。
此处以调用所有解析选项为例,提供解析XML标签、属性和事件类型的开发示例。
```
j
s
```
t
s
import xml from '@ohos.xml';
import xml from '@ohos.xml';
import util from '@ohos.util';
import util from '@ohos.util';
...
@@ -218,13 +217,13 @@ function tagFunc(name: string, value: string): boolean {
...
@@ -218,13 +217,13 @@ function tagFunc(name: string, value: string): boolean {
return true;
return true;
}
}
function
attFunc
(
name
:
string
,
value
:
string
):
boolean
{
function attFunc(name:
xml.EventType
, value: string): boolean {
str = name + ' ' + value;
str = name + ' ' + value;
console.info('attri-' + str);
console.info('attri-' + str);
return true;
return true;
}
}
function
tokenFunc
(
name
:
string
,
value
:
xml
.
ParseInfo
):
boolean
{
function tokenFunc(name:
xml.EventType
, value: xml.ParseInfo): boolean {
str = name + ' ' + value.getDepth();
str = name + ' ' + value.getDepth();
console.info('token-' + str);
console.info('token-' + str);
return true;
return true;
...
@@ -238,33 +237,31 @@ let options: xml.ParseOptions = {
...
@@ -238,33 +237,31 @@ let options: xml.ParseOptions = {
tokenValueCallbackFunction: tokenFunc
tokenValueCallbackFunction: tokenFunc
};
};
that.parse(options);
that.parse(options);
```
```
输出结果如下所示:
输出结果如下所示:
```
```
js
tag-
tag
-
token-0 0
token
-
0
0
tag-book
tag
-
book
attri-category COOKING
attri
-
category
COOKING
token-2 1
token
-
2
1
tag-title
tag
-
title
attri-lang en
attri
-
lang
en
token-2 2
token
-
2
2
tag-Everyday
tag
-
Everyday
token-4 2
token
-
4
2
tag-title
tag
-
title
token-3 2
token
-
3
2
tag-author
tag
-
author
token-2 2
token
-
2
2
tag-Giada
tag
-
Giada
token-4 2
token
-
4
2
tag-author
tag
-
author
token-3 2
token
-
3
2
tag-book
tag
-
book
token-3 1
token
-
3
1
tag-
tag
-
token-1 0
token
-
1
0
```
```
zh-cn/application-dev/reference/apis/js-apis-taskpool.md
浏览文件 @
8485a7ce
...
@@ -688,7 +688,7 @@ taskpoolExecute();
...
@@ -688,7 +688,7 @@ taskpoolExecute();
```
ts
```
ts
// b.ets
// b.ets
export
let
c
:
number
=
2000
;
export
let
c
:
string
=
"
hello
"
;
```
```
```
ts
```
ts
// 引用import变量
// 引用import变量
...
@@ -696,7 +696,7 @@ export let c: number = 2000;
...
@@ -696,7 +696,7 @@ export let c: number = 2000;
import
{
c
}
from
"
./b
"
;
import
{
c
}
from
"
./b
"
;
@
Concurrent
@
Concurrent
function
printArgs
(
a
:
number
):
number
{
function
printArgs
(
a
:
string
):
string
{
console
.
log
(
a
);
console
.
log
(
a
);
console
.
log
(
c
);
console
.
log
(
c
);
return
a
;
return
a
;
...
...
zh-cn/application-dev/reference/apis/js-apis-worker.md
浏览文件 @
8485a7ce
...
@@ -11,7 +11,7 @@ Worker的上下文对象和主线程的上下文对象是不同的,Worker线
...
@@ -11,7 +11,7 @@ Worker的上下文对象和主线程的上下文对象是不同的,Worker线
## 导入模块
## 导入模块
```
j
s
```
t
s
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
```
```
...
@@ -77,7 +77,7 @@ ThreadWorker构造函数。
...
@@ -77,7 +77,7 @@ ThreadWorker构造函数。
**示例:**
**示例:**
```
j
s
```
t
s
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
// worker线程创建
// worker线程创建
...
@@ -184,10 +184,10 @@ postMessage(message: Object, transfer: ArrayBuffer[]): void
...
@@ -184,10 +184,10 @@ postMessage(message: Object, transfer: ArrayBuffer[]): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
var
buffer
=
new
ArrayBuffer
(
8
);
let
buffer
=
new
ArrayBuffer
(
8
);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
```
```
...
@@ -217,12 +217,12 @@ postMessage(message: Object, options?: PostMessageOptions): void
...
@@ -217,12 +217,12 @@ postMessage(message: Object, options?: PostMessageOptions): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
var
buffer
=
new
ArrayBuffer
(
8
);
let
buffer
=
new
ArrayBuffer
(
8
);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
```
```
...
@@ -252,7 +252,7 @@ on(type: string, listener: WorkerEventListener): void
...
@@ -252,7 +252,7 @@ on(type: string, listener: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
on
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
on
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -286,7 +286,7 @@ once(type: string, listener: WorkerEventListener): void
...
@@ -286,7 +286,7 @@ once(type: string, listener: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
once
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
once
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -320,7 +320,7 @@ off(type: string, listener?: WorkerEventListener): void
...
@@ -320,7 +320,7 @@ off(type: string, listener?: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
workerInstance
.
off
(
"
alert
"
);
workerInstance
.
off
(
"
alert
"
);
...
@@ -345,7 +345,7 @@ terminate(): void
...
@@ -345,7 +345,7 @@ terminate(): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
terminate
();
workerInstance
.
terminate
();
```
```
...
@@ -376,10 +376,10 @@ Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序
...
@@ -376,10 +376,10 @@ Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
onexit
=
function
(
e
)
{
workerInstance
.
onexit
=
()
=>
{
console
.
log
(
"
onexit
"
);
console
.
log
(
"
onexit
"
);
}
}
//onexit被执行两种方式:
//onexit被执行两种方式:
...
@@ -416,9 +416,9 @@ Worker对象的onerror属性表示Worker在执行过程中发生异常被调用
...
@@ -416,9 +416,9 @@ Worker对象的onerror属性表示Worker在执行过程中发生异常被调用
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
onerror
=
function
(
e
)
{
workerInstance
.
onerror
=
()
=>
{
console
.
log
(
"
onerror
"
);
console
.
log
(
"
onerror
"
);
}
}
```
```
...
@@ -449,12 +449,14 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worke
...
@@ -449,12 +449,14 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worke
**示例:**
**示例:**
```
js
```
ts
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// e : MessageEvents, 用法如下:
// e : MessageEvents, 用法如下:
// let data = e.data;
// let data = e.data;
console
.
log
(
"
onmessage
"
);
console
.
log
(
"
onmessage
"
);
}
}
```
```
...
@@ -484,9 +486,9 @@ Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被
...
@@ -484,9 +486,9 @@ Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
onmessageerror
=
function
(
e
)
{
workerInstance
.
onmessageerror
=
()
=>
{
console
.
log
(
"
onmessageerror
"
);
console
.
log
(
"
onmessageerror
"
);
}
}
```
```
...
@@ -517,7 +519,7 @@ addEventListener(type: string, listener: WorkerEventListener): void
...
@@ -517,7 +519,7 @@ addEventListener(type: string, listener: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -550,7 +552,7 @@ removeEventListener(type: string, callback?: WorkerEventListener): void
...
@@ -550,7 +552,7 @@ removeEventListener(type: string, callback?: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -589,7 +591,7 @@ dispatchEvent(event: Event): boolean
...
@@ -589,7 +591,7 @@ dispatchEvent(event: Event): boolean
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
...
@@ -597,7 +599,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
...
@@ -597,7 +599,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
//用法一:
//用法一:
...
@@ -630,7 +632,7 @@ workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
...
@@ -630,7 +632,7 @@ workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
workerInstance
.
addEventListener
(
"
message
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
message
"
,
(
e
)
=>
{
console
.
log
(
"
message listener callback
"
);
console
.
log
(
"
message listener callback
"
);
})
})
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
console
.
log
(
"
onmessage : message listener callback
"
);
console
.
log
(
"
onmessage : message listener callback
"
);
}
}
//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
...
@@ -656,7 +658,7 @@ removeAllListener(): void
...
@@ -656,7 +658,7 @@ removeAllListener(): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -692,7 +694,7 @@ addEventListener(type: string, listener: WorkerEventListener): void
...
@@ -692,7 +694,7 @@ addEventListener(type: string, listener: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -725,7 +727,7 @@ removeEventListener(type: string, callback?: WorkerEventListener): void
...
@@ -725,7 +727,7 @@ removeEventListener(type: string, callback?: WorkerEventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -764,7 +766,7 @@ dispatchEvent(event: Event): boolean
...
@@ -764,7 +766,7 @@ dispatchEvent(event: Event): boolean
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
...
@@ -772,7 +774,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
...
@@ -772,7 +774,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
//用法一:
//用法一:
...
@@ -805,7 +807,7 @@ workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
...
@@ -805,7 +807,7 @@ workerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
workerInstance
.
addEventListener
(
"
message
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
message
"
,
(
e
)
=>
{
console
.
log
(
"
message listener callback
"
);
console
.
log
(
"
message listener callback
"
);
})
})
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
console
.
log
(
"
onmessage : message listener callback
"
);
console
.
log
(
"
onmessage : message listener callback
"
);
}
}
//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
...
@@ -831,7 +833,7 @@ removeAllListener(): void
...
@@ -831,7 +833,7 @@ removeAllListener(): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -870,24 +872,22 @@ Worker线程通过转移对象所有权的方式向宿主线程发送消息。
...
@@ -870,24 +872,22 @@ Worker线程通过转移对象所有权的方式向宿主线程发送消息。
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
console
.
log
(
"
receive data from worker.ts
"
);
console
.
log
(
"
receive data from worker.ts
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessage
=
function
(
e
){
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
let
buffer
=
new
ArrayBuffer
(
8
);
var
buffer
=
new
ArrayBuffer
(
8
);
workerPort
.
postMessage
(
buffer
,
[
buffer
]);
workerPort
.
postMessage
(
buffer
,
[
buffer
]);
}
}
```
```
...
@@ -918,23 +918,21 @@ Worker线程通过转移对象所有权或者拷贝数据的方式向宿主线
...
@@ -918,23 +918,21 @@ Worker线程通过转移对象所有权或者拷贝数据的方式向宿主线
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
console
.
log
(
"
receive data from worker.ts
"
);
console
.
log
(
"
receive data from worker.ts
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessage
=
function
(
e
){
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
workerPort
.
postMessage
(
"
receive data from main thread
"
);
workerPort
.
postMessage
(
"
receive data from main thread
"
);
}
}
```
```
...
@@ -958,17 +956,17 @@ close(): void
...
@@ -958,17 +956,17 @@ close(): void
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessage
=
function
(
e
)
{
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
workerPort
.
close
()
workerPort
.
close
()
}
}
```
```
...
@@ -1000,18 +998,18 @@ ThreadWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主
...
@@ -1000,18 +998,18 @@ ThreadWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessage
=
function
(
e
)
{
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
console
.
log
(
"
receive main thread message
"
);
console
.
log
(
"
receive main thread message
"
);
}
}
```
```
...
@@ -1043,17 +1041,17 @@ ThreadWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一
...
@@ -1043,17 +1041,17 @@ ThreadWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessageerror
=
function
(
e
)
{
workerPort
.
onmessageerror
=
()
=>
{
console
.
log
(
"
worker.ts onmessageerror
"
)
console
.
log
(
"
worker.ts onmessageerror
"
)
}
}
```
```
...
@@ -1090,9 +1088,9 @@ workerPort.onmessageerror = function(e) {
...
@@ -1090,9 +1088,9 @@ workerPort.onmessageerror = function(e) {
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
()
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
})
})
```
```
...
@@ -1128,17 +1126,17 @@ GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用
...
@@ -1128,17 +1126,17 @@ GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
)
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/workers/worker.ts
"
)
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
const
workerPort
=
worker
.
workerPort
workerPort
.
onerror
=
function
(
e
)
{
workerPort
.
onerror
=
()
=>
{
console
.
log
(
"
worker.ts onerror
"
)
console
.
log
(
"
worker.ts onerror
"
)
}
}
```
```
...
@@ -1187,7 +1185,7 @@ Worker构造函数。
...
@@ -1187,7 +1185,7 @@ Worker构造函数。
**示例:**
**示例:**
```
j
s
```
t
s
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
// worker线程创建
// worker线程创建
...
@@ -1273,10 +1271,10 @@ postMessage(message: Object, transfer: ArrayBuffer[]): void
...
@@ -1273,10 +1271,10 @@ postMessage(message: Object, transfer: ArrayBuffer[]): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
var
buffer
=
new
ArrayBuffer
(
8
);
let
buffer
=
new
ArrayBuffer
(
8
);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
```
```
...
@@ -1300,12 +1298,12 @@ postMessage(message: Object, options?: PostMessageOptions): void
...
@@ -1300,12 +1298,12 @@ postMessage(message: Object, options?: PostMessageOptions): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
var
buffer
=
new
ArrayBuffer
(
8
);
let
buffer
=
new
ArrayBuffer
(
8
);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
workerInstance
.
postMessage
(
buffer
,
[
buffer
]);
```
```
...
@@ -1330,9 +1328,9 @@ on(type: string, listener: EventListener): void
...
@@ -1330,9 +1328,9 @@ on(type: string, listener: EventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
on
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
on
(
"
alert
"
,
()
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
})
})
```
```
...
@@ -1358,7 +1356,7 @@ once(type: string, listener: EventListener): void
...
@@ -1358,7 +1356,7 @@ once(type: string, listener: EventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
once
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
once
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -1386,7 +1384,7 @@ off(type: string, listener?: EventListener): void
...
@@ -1386,7 +1384,7 @@ off(type: string, listener?: EventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
workerInstance
.
off
(
"
alert
"
);
workerInstance
.
off
(
"
alert
"
);
...
@@ -1406,7 +1404,7 @@ terminate(): void
...
@@ -1406,7 +1404,7 @@ terminate(): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
terminate
();
workerInstance
.
terminate
();
```
```
...
@@ -1431,9 +1429,9 @@ Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序
...
@@ -1431,9 +1429,9 @@ Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
onexit
=
function
(
e
)
{
workerInstance
.
onexit
=
()
=>
{
console
.
log
(
"
onexit
"
);
console
.
log
(
"
onexit
"
);
}
}
...
@@ -1465,9 +1463,9 @@ Worker对象的onerror属性表示Worker在执行过程中发生异常被调用
...
@@ -1465,9 +1463,9 @@ Worker对象的onerror属性表示Worker在执行过程中发生异常被调用
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
onerror
=
function
(
e
)
{
workerInstance
.
onerror
=
function
()
{
console
.
log
(
"
onerror
"
);
console
.
log
(
"
onerror
"
);
}
}
```
```
...
@@ -1492,11 +1490,9 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worke
...
@@ -1492,11 +1490,9 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worke
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// e : MessageEvent, 用法如下:
// let data = e.data;
console
.
log
(
"
onmessage
"
);
console
.
log
(
"
onmessage
"
);
}
}
```
```
...
@@ -1521,9 +1517,9 @@ Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被
...
@@ -1521,9 +1517,9 @@ Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
onmessageerror
=
function
(
e
)
{
workerInstance
.
onmessageerror
=
()
=>
{
console
.
log
(
"
onmessageerror
"
);
console
.
log
(
"
onmessageerror
"
);
}
}
```
```
...
@@ -1553,9 +1549,9 @@ addEventListener(type: string, listener: EventListener): void
...
@@ -1553,9 +1549,9 @@ addEventListener(type: string, listener: EventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
()
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
})
})
```
```
...
@@ -1581,9 +1577,9 @@ removeEventListener(type: string, callback?: EventListener): void
...
@@ -1581,9 +1577,9 @@ removeEventListener(type: string, callback?: EventListener): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
()
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
})
})
workerInstance
.
removeEventListener
(
"
alert
"
);
workerInstance
.
removeEventListener
(
"
alert
"
);
...
@@ -1615,7 +1611,7 @@ dispatchEvent(event: Event): boolean
...
@@ -1615,7 +1611,7 @@ dispatchEvent(event: Event): boolean
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
workerInstance
.
dispatchEvent
({
type
:
"
eventType
"
,
timeStamp
:
0
});
//timeStamp暂未支持。
...
@@ -1623,7 +1619,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
...
@@ -1623,7 +1619,7 @@ workerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
//用法一:
//用法一:
...
@@ -1675,7 +1671,7 @@ removeAllListener(): void
...
@@ -1675,7 +1671,7 @@ removeAllListener(): void
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
...
@@ -1729,21 +1725,21 @@ Worker线程通过转移对象所有权的方式向宿主线程发送消息。
...
@@ -1729,21 +1725,21 @@ Worker线程通过转移对象所有权的方式向宿主线程发送消息。
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
// let data = e.data;
console
.
log
(
"
receive data from worker.ts
"
);
console
.
log
(
"
receive data from worker.ts
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
workerPort
.
onmessage
=
function
(
e
)
{
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
// let data = e.data;
let
buffer
=
new
ArrayBuffer
(
5
)
let
buffer
=
new
ArrayBuffer
(
5
)
workerPort
.
postMessage
(
buffer
,
[
buffer
]);
workerPort
.
postMessage
(
buffer
,
[
buffer
]);
...
@@ -1770,21 +1766,21 @@ Worker线程通过转移对象所有权或者拷贝数据的方式向宿主线
...
@@ -1770,21 +1766,21 @@ Worker线程通过转移对象所有权或者拷贝数据的方式向宿主线
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
// let data = e.data;
console
.
log
(
"
receive data from worker.ts
"
);
console
.
log
(
"
receive data from worker.ts
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
;
const
parentPort
=
worker
.
parentPort
;
parentPort
.
onmessage
=
function
(
e
)
{
parentPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// let data = e.data;
// let data = e.data;
parentPort
.
postMessage
(
"
receive data from main thread
"
);
parentPort
.
postMessage
(
"
receive data from main thread
"
);
}
}
...
@@ -1803,16 +1799,16 @@ close(): void
...
@@ -1803,16 +1799,16 @@ close(): void
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
;
const
parentPort
=
worker
.
parentPort
;
parentPort
.
onmessage
=
function
(
e
)
{
parentPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
parentPort
.
close
()
parentPort
.
close
()
}
}
```
```
...
@@ -1838,17 +1834,17 @@ DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿
...
@@ -1838,17 +1834,17 @@ DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
workerInstance
.
postMessage
(
"
hello world
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
;
const
parentPort
=
worker
.
parentPort
;
parentPort
.
onmessage
=
function
(
e
)
{
parentPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
console
.
log
(
"
receive main thread message
"
);
console
.
log
(
"
receive main thread message
"
);
}
}
```
```
...
@@ -1874,16 +1870,16 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到
...
@@ -1874,16 +1870,16 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
;
const
parentPort
=
worker
.
parentPort
;
parentPort
.
onmessageerror
=
function
(
e
)
{
parentPort
.
onmessageerror
=
()
=>
{
console
.
log
(
"
worker.ts onmessageerror
"
)
console
.
log
(
"
worker.ts onmessageerror
"
)
}
}
```
```
...
@@ -1937,9 +1933,9 @@ parentPort.onmessageerror = function(e) {
...
@@ -1937,9 +1933,9 @@ parentPort.onmessageerror = function(e) {
**示例:**
**示例:**
```
j
s
```
t
s
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
workerInstance
.
addEventListener
(
"
alert
"
,
(
e
)
=>
{
workerInstance
.
addEventListener
(
"
alert
"
,
()
=>
{
console
.
log
(
"
alert listener callback
"
);
console
.
log
(
"
alert listener callback
"
);
})
})
```
```
...
@@ -2007,16 +2003,16 @@ WorkerGlobalScope的onerror属性表示Worker在执行过程中发生异常被
...
@@ -2007,16 +2003,16 @@ WorkerGlobalScope的onerror属性表示Worker在执行过程中发生异常被
**示例:**
**示例:**
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
)
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
)
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
from
'
@ohos.worker
'
;
const
parentPort
=
worker
.
parentPort
const
parentPort
=
worker
.
parentPort
parentPort
.
onerror
=
function
(
e
)
{
parentPort
.
onerror
=
()
=>
{
console
.
log
(
"
worker.ts onerror
"
)
console
.
log
(
"
worker.ts onerror
"
)
}
}
```
```
...
@@ -2032,19 +2028,19 @@ parentPort.onerror = function(e){
...
@@ -2032,19 +2028,19 @@ parentPort.onerror = function(e){
> **说明:**<br/>
> **说明:**<br/>
> 以API version 9的FA工程为例。
> 以API version 9的FA工程为例。
```
j
s
```
t
s
// main thread
// main thread
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.ts
"
);
workerInstance
.
postMessage
(
"
message from main thread to worker
"
);
workerInstance
.
postMessage
(
"
message from main thread to worker
"
);
workerInstance
.
onmessage
=
function
(
d
)
{
workerInstance
.
onmessage
=
(
d
:
MessageEvents
):
void
=>
{
// 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法
// 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法
let
data
=
d
.
data
;
let
data
:
string
=
d
.
data
;
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
const
workerPort
=
worker
.
workerPort
;
const
workerPort
=
worker
.
workerPort
;
class
MyModel
{
class
MyModel
{
name
=
"
undefined
"
name
=
"
undefined
"
...
@@ -2052,10 +2048,10 @@ class MyModel {
...
@@ -2052,10 +2048,10 @@ class MyModel {
this
.
name
=
"
MyModel
"
this
.
name
=
"
MyModel
"
}
}
}
}
workerPort
.
onmessage
=
function
(
d
)
{
workerPort
.
onmessage
=
(
d
:
MessageEvents
):
void
=>
{
console
.
log
(
"
worker.ts onmessage
"
);
console
.
log
(
"
worker.ts onmessage
"
);
let
data
=
d
.
data
;
let
data
:
string
=
d
.
data
;
let
func1
=
function
()
{
let
func1
=
()
=>
{
console
.
log
(
"
post message is function
"
);
console
.
log
(
"
post message is function
"
);
}
}
let
obj1
=
{
let
obj1
=
{
...
@@ -2070,16 +2066,16 @@ workerPort.onmessage = function(d) {
...
@@ -2070,16 +2066,16 @@ workerPort.onmessage = function(d) {
// workerPort.postMessage(obj1); 传递obj1发生序列化错误
// workerPort.postMessage(obj1); 传递obj1发生序列化错误
workerPort
.
postMessage
(
obj2
);
// 传递obj2不会发生序列化错误
workerPort
.
postMessage
(
obj2
);
// 传递obj2不会发生序列化错误
}
}
workerPort
.
onmessageerror
=
function
(
e
)
{
workerPort
.
onmessageerror
=
()
=>
{
console
.
log
(
"
worker.ts onmessageerror
"
);
console
.
log
(
"
worker.ts onmessageerror
"
);
}
}
workerPort
.
onerror
=
function
(
e
)
{
workerPort
.
onerror
=
()
=>
{
console
.
log
(
"
worker.ts onerror
"
);
console
.
log
(
"
worker.ts onerror
"
);
}
}
```
```
### 内存模型
### 内存模型
Worker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。
Worker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。
Actor并发模型的交互原理:各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。
Actor并发模型的交互原理:各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。
...
@@ -2088,9 +2084,9 @@ Actor并发模型的交互原理:各个Actor并发地处理主线程任务,
...
@@ -2088,9 +2084,9 @@ Actor并发模型的交互原理:各个Actor并发地处理主线程任务,
> 以API version 9的工程为例。<br> API version 8及之前的版本仅支持FA模型,如需使用,注意更换构造Worker的接口和创建worker线程中与主线程通信的对象的两个方法。
> 以API version 9的工程为例。<br> API version 8及之前的版本仅支持FA模型,如需使用,注意更换构造Worker的接口和创建worker线程中与主线程通信的对象的两个方法。
### FA模型
### FA模型
```
j
s
```
t
s
// main thread(同级目录为例)
// main thread(同级目录为例)
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
workers/worker.ts
"
);
...
@@ -2098,9 +2094,9 @@ const workerInstance = new worker.ThreadWorker("workers/worker.ts");
...
@@ -2098,9 +2094,9 @@ const workerInstance = new worker.ThreadWorker("workers/worker.ts");
workerInstance
.
postMessage
(
"
123
"
);
workerInstance
.
postMessage
(
"
123
"
);
// 主线程接收worker线程信息
// 主线程接收worker线程信息
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// data:worker线程发送的信息
// data:worker线程发送的信息
let
data
=
e
.
data
;
let
data
:
string
=
e
.
data
;
console
.
log
(
"
main thread onmessage
"
);
console
.
log
(
"
main thread onmessage
"
);
// 销毁Worker对象
// 销毁Worker对象
...
@@ -2108,21 +2104,21 @@ workerInstance.onmessage = function(e) {
...
@@ -2108,21 +2104,21 @@ workerInstance.onmessage = function(e) {
}
}
// 在调用terminate后,执行回调onexit
// 在调用terminate后,执行回调onexit
workerInstance
.
onexit
=
function
()
{
workerInstance
.
onexit
=
()
=>
{
console
.
log
(
"
main thread terminate
"
);
console
.
log
(
"
main thread terminate
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
// 创建worker线程中与主线程通信的对象
const
workerPort
=
worker
.
workerPort
const
workerPort
=
worker
.
workerPort
// worker线程接收主线程信息
// worker线程接收主线程信息
workerPort
.
onmessage
=
function
(
e
)
{
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// data:主线程发送的信息
// data:主线程发送的信息
let
data
=
e
.
data
;
let
data
:
string
=
e
.
data
;
console
.
log
(
"
worker.ts onmessage
"
);
console
.
log
(
"
worker.ts onmessage
"
);
// worker线程向主线程发送信息
// worker线程向主线程发送信息
...
@@ -2130,7 +2126,7 @@ workerPort.onmessage = function(e) {
...
@@ -2130,7 +2126,7 @@ workerPort.onmessage = function(e) {
}
}
// worker线程发生error的回调
// worker线程发生error的回调
workerPort
.
onerror
=
function
(
e
)
{
workerPort
.
onerror
=
()
=>
{
console
.
log
(
"
worker.ts onerror
"
);
console
.
log
(
"
worker.ts onerror
"
);
}
}
```
```
...
@@ -2145,9 +2141,9 @@ build-profile.json5 配置 :
...
@@ -2145,9 +2141,9 @@ build-profile.json5 配置 :
}
}
```
```
### Stage模型
### Stage模型
```
j
s
```
t
s
// main thread(以不同目录为例)
// main thread(以不同目录为例)
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/pages/workers/worker.ts
"
);
const
workerInstance
=
new
worker
.
ThreadWorker
(
"
entry/ets/pages/workers/worker.ts
"
);
...
@@ -2156,30 +2152,30 @@ const workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.t
...
@@ -2156,30 +2152,30 @@ const workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.t
workerInstance
.
postMessage
(
"
123
"
);
workerInstance
.
postMessage
(
"
123
"
);
// 主线程接收worker线程信息
// 主线程接收worker线程信息
workerInstance
.
onmessage
=
function
(
e
)
{
workerInstance
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// data:worker线程发送的信息
// data:worker线程发送的信息
let
data
=
e
.
data
;
let
data
:
string
=
e
.
data
;
console
.
log
(
"
main thread onmessage
"
);
console
.
log
(
"
main thread onmessage
"
);
// 销毁Worker对象
// 销毁Worker对象
workerInstance
.
terminate
();
workerInstance
.
terminate
();
}
}
// 在调用terminate后,执行onexit
// 在调用terminate后,执行onexit
workerInstance
.
onexit
=
function
()
{
workerInstance
.
onexit
=
()
=>
{
console
.
log
(
"
main thread terminate
"
);
console
.
log
(
"
main thread terminate
"
);
}
}
```
```
```
j
s
```
t
s
// worker.ts
// worker.ts
import
worker
from
'
@ohos.worker
'
;
import
worker
,
{
MessageEvents
}
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
// 创建worker线程中与主线程通信的对象
const
workerPort
=
worker
.
workerPort
const
workerPort
=
worker
.
workerPort
// worker线程接收主线程信息
// worker线程接收主线程信息
workerPort
.
onmessage
=
function
(
e
)
{
workerPort
.
onmessage
=
(
e
:
MessageEvents
):
void
=>
{
// data:主线程发送的信息
// data:主线程发送的信息
let
data
=
e
.
data
;
let
data
:
string
=
e
.
data
;
console
.
log
(
"
worker.ts onmessage
"
);
console
.
log
(
"
worker.ts onmessage
"
);
// worker线程向主线程发送信息
// worker线程向主线程发送信息
...
@@ -2187,7 +2183,7 @@ workerPort.onmessage = function(e) {
...
@@ -2187,7 +2183,7 @@ workerPort.onmessage = function(e) {
}
}
// worker线程发生error的回调
// worker线程发生error的回调
workerPort
.
onerror
=
function
(
e
)
{
workerPort
.
onerror
=
()
=>
{
console
.
log
(
"
worker.ts onerror
"
);
console
.
log
(
"
worker.ts onerror
"
);
}
}
```
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录