From 1da0ee1f9804b43f96a5a3e335cf0554cffc7106 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Tue, 7 Jan 2025 10:32:13 +0800 Subject: [PATCH] ArkTSDocsSample_BatchDatabaseOperationsGuide Signed-off-by: wangweiyuan --- .../BatchDatabaseOperationsGuide/.gitignore | 12 ++ .../AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../BatchDatabaseOperationsGuide/README.md | 75 +++++++++ .../build-profile.json5 | 58 +++++++ .../code-linter.json5 | 35 +++++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++++++ .../entry/hvigorfile.ts | 21 +++ .../entry/obfuscation-rules.txt | 23 +++ .../entry/oh-package.json5 | 25 +++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../main/ets/managers/SharedValuesBucket.ets | 36 +++++ .../src/main/ets/managers/UsingSendable.ets | 143 ++++++++++++++++++ .../src/main/ets/managers/UsingTaskPool.ets | 141 +++++++++++++++++ .../entry/src/main/ets/pages/Index.ets | 46 ++++++ .../entry/src/main/ets/util/CommonButton.ets | 46 ++++++ .../entry/src/main/ets/util/resource.ets | 25 +++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 28 ++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 7 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 +++ .../src/ohosTest/ets/test/Ability.test.ets | 70 +++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 +++ .../entry/src/ohosTest/module.json5 | 27 ++++ .../entry/src/test/List.test.ets | 20 +++ .../entry/src/test/LocalUnit.test.ets | 48 ++++++ .../hvigor/hvigor-config.json5 | 37 +++++ .../hvigorfile.ts | 21 +++ .../oh-package.json5 | 25 +++ .../BatchDatabaseOperationsGuide/ohosTest.md | 9 ++ .../BatchDatabaseOperationsGuide_1.png | Bin 0 -> 48787 bytes .../BatchDatabaseOperationsGuide_2.png | Bin 0 -> 24533 bytes 42 files changed, 1273 insertions(+) create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/.gitignore create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/app.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/element/string.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/media/app_icon.png create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/README.md create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/build-profile.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/code-linter.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/.gitignore create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/build-profile.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/hvigorfile.ts create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/obfuscation-rules.txt create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/oh-package.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entryability/EntryAbility.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/SharedValuesBucket.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingSendable.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingTaskPool.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/pages/Index.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/CommonButton.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/resource.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/module.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/color.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/string.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/background.png create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/foreground.png create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/layered_image.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/startIcon.png create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/backup_config.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/main_pages.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/dark/element/color.json create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/mock/mock-config.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/List.test.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/module.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/List.test.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/LocalUnit.test.ets create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigor/hvigor-config.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigorfile.ts create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/oh-package.json5 create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/ohosTest.md create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_1.png create mode 100755 code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_2.png diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/.gitignore b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/.gitignore new file mode 100755 index 0000000000..d2ff20141c --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/app.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/app.json5 new file mode 100755 index 0000000000..5eb80171d9 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "app": { + "bundleName": "com.samples.batchdatabaseoperationsguide", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/element/string.json new file mode 100755 index 0000000000..74e909acc6 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "BatchDatabaseOperationsGuide" + } + ] +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/media/app_icon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/AppScope/resources/base/media/app_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/README.md b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/README.md new file mode 100755 index 0000000000..f2d8cf45d2 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/README.md @@ -0,0 +1,75 @@ +# ArkTS 批量数据写数据库场景 + +### 介绍 + +使用TaskPool进行频繁数据库操作:对于需要频繁数据库操作的场景,由于读写数据库存在耗时,因此推荐在子线程中操作,避免阻塞UI线程。 + +使用Sendable进行大容量数据库操作:由于数据库数据跨线程传递存在耗时,当数据量较大时,仍然会占用UI主线程,推荐采用Sendable封装数据库数据,降低跨线程开销。 + +该工程中展示的代码详细描述可查如下链接: + +- [批量数据写数据库场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/batch-database-operations-guide.md) + +### 效果预览 + +| 首页 | 执行及结果即时反馈 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | +| | | + +### 使用说明 + +1. 在主界面,点击任意按钮进行跳转,点击Hello World执行程序 +2. 执行结果会即时反馈在屏幕中央,并在控制台打印log。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── managers + │ │ ├── SharedValuesBucket.ets // 使用Sendable进行大容量数据库操作 + │ │ ├── UsingSendable.ets // 使用Sendable进行大容量数据库操作 + │ │ ├── UsingTaskPool.ets // 使用TaskPool进行频繁数据库操作 + │ │ ├── pages + │ │ ├── Index.ets // 首页 + │ │ ├── util + │ │ ├── CommonButton.ets // 首页跳转UI + │ │ ├── resource.ets // 资源引用转换 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ ├── test + │ │ ├── Ability.test.ets // 自动化测试代码 +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1.本示例仅支持标准系统上运行, 支持设备:RK3568。 + +2.本示例为Stage模型,支持API14版本SDK,版本号:5.0.2.57,镜像版本号:OpenHarmony_5.0.2.58。 + +3.本示例需要使用DevEco Studio 5.0.1 Release (Build Version: 5.0.5.306, built on December 6, 2024)及以上版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo code/DocsSample/ArkTs/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull origin master +```` \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/build-profile.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/build-profile.json5 new file mode 100755 index 0000000000..df8b8004f9 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/build-profile.json5 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compileSdkVersion": 14, + "compatibleSdkVersion": 14, + "targetSdkVersion": 14, + "runtimeOS": "OpenHarmony", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/code-linter.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/code-linter.json5 new file mode 100755 index 0000000000..28586467ee --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/.gitignore b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/.gitignore new file mode 100755 index 0000000000..e2713a2779 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/build-profile.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/build-profile.json5 new file mode 100755 index 0000000000..b4d65d490e --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/hvigorfile.ts b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/hvigorfile.ts new file mode 100755 index 0000000000..e4f43d5466 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/obfuscation-rules.txt b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/obfuscation-rules.txt new file mode 100755 index 0000000000..272efb6ca3 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/oh-package.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/oh-package.json5 new file mode 100755 index 0000000000..4bf3e2a9b1 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100755 index 0000000000..3e77e4b9f7 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100755 index 0000000000..1504a74f09 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/SharedValuesBucket.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/SharedValuesBucket.ets new file mode 100755 index 0000000000..1140227aef --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/SharedValuesBucket.ets @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface IValueBucket { + id: number + name: string + age: number + salary: number +} + +@Sendable +export class SharedValuesBucket implements IValueBucket { + id: number = 0 + name: string = '' + age: number = 0 + salary: number = 0 + + constructor(v: IValueBucket) { + this.id = v.id; + this.name = v.name; + this.age = v.age; + this.salary = v.salary + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingSendable.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingSendable.ets new file mode 100755 index 0000000000..5385b091c9 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingSendable.ets @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { relationalStore, ValuesBucket } from '@kit.ArkData'; +import { collections, taskpool } from '@kit.ArkTS'; +import { IValueBucket, SharedValuesBucket } from './SharedValuesBucket'; + +@Concurrent +async function create(context: Context) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 创建表 + const CREATE_TABLE_SQL = 'CREATE TABLE IF NOT EXISTS test (' + + 'id INTEGER PRIMARY KEY AUTOINCREMENT, ' + + 'name TEXT NOT NULL, ' + + 'age INTEGER, ' + + 'salary REAL, ' + + 'blobType BLOB)'; + await store.executeSql(CREATE_TABLE_SQL); + console.info(`Create table test successfully!`); +} + +@Concurrent +async function insert(context: Context, valueBucketArray: Array) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 数据插入 + await store.batchInsert('test', valueBucketArray as Object as Array); +} + +@Concurrent +async function query(context: Context): Promise> { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 获取结果集 + let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates('test'); + let resultSet = await store.query(predicates); // 查询所有数据 + console.info(`Query data successfully! row count:${resultSet.rowCount}`); + let index = 0; + let result = new Array(resultSet.rowCount) + resultSet.goToFirstRow() + do { + result[index++] = resultSet.getRow() + } while (resultSet.goToNextRow()); + resultSet.close(); + return result +} + +@Concurrent +async function clear(context: Context) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + await relationalStore.deleteRdbStore(context, CONFIG); + console.info(`Delete Store.db successfully!`); +} + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + RelativeContainer() { + Text(this.message) + .id('HelloWorld') + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + .onClick(async () => { + let context = getContext(this); + + // 数据准备 + const count = 5 + let valueBucketArray = collections.Array.create(count, undefined); + for (let i = 0; i < count; i++) { + let v: IValueBucket = { + id: i, + name: 'zhangsan' + i, + age: 20, + salary: 5000 + 50 * i + }; + valueBucketArray[i] = new SharedValuesBucket(v); + } + await taskpool.execute(create, context) + await taskpool.execute(insert, context, valueBucketArray) + let index = 0 + let ret: collections.Array = + await taskpool.execute(query, context) as collections.Array + for (let v of ret.values()) { + console.info(`Row[${index}].id = ${v.id}`) + console.info(`Row[${index}].name = ${v.name}`) + console.info(`Row[${index}].age = ${v.age}`) + console.info(`Row[${index}].salary = ${v.salary}`) + index++ + } + await taskpool.execute(clear, context) + this.message = 'success'; + }) + } + .height('100%') + .width('100%') + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingTaskPool.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingTaskPool.ets new file mode 100755 index 0000000000..d6e9432d70 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/managers/UsingTaskPool.ets @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { relationalStore, ValuesBucket } from '@kit.ArkData'; +import { taskpool } from '@kit.ArkTS'; + +@Concurrent +async function create(context: Context) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 创建表 + const CREATE_TABLE_SQL = 'CREATE TABLE IF NOT EXISTS test (' + + 'id INTEGER PRIMARY KEY AUTOINCREMENT, ' + + 'name TEXT NOT NULL, ' + + 'age INTEGER, ' + + 'salary REAL, ' + + 'blobType BLOB)'; + await store.executeSql(CREATE_TABLE_SQL); + console.info(`Create table test successfully!`); +} + +@Concurrent +async function insert(context: Context, valueBucketArray: Array) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 数据插入 + await store.batchInsert('test', valueBucketArray as Object as Array); +} + +@Concurrent +async function query(context: Context): Promise> { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG); + console.info(`Create Store.db successfully!`); + + // 获取结果集 + let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates('test'); + let resultSet = await store.query(predicates); // 查询所有数据 + console.info(`Query data successfully! row count:${resultSet.rowCount}`); + let index = 0; + let result = new Array(resultSet.rowCount) + resultSet.goToFirstRow() + do { + result[index++] = resultSet.getRow() + } while (resultSet.goToNextRow()); + resultSet.close(); + return result +} + +@Concurrent +async function clear(context: Context) { + const CONFIG: relationalStore.StoreConfig = { + name: 'Store.db', + securityLevel: relationalStore.SecurityLevel.S1, + }; + + // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name + await relationalStore.deleteRdbStore(context, CONFIG); + console.info(`Delete Store.db successfully!`); +} + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + RelativeContainer() { + Text(this.message) + .id('HelloWorld') + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + .onClick(async () => { + let context = getContext(this); + + // 数据准备 + const count = 5 + let valueBucketArray = new Array(count); + for (let i = 0; i < count; i++) { + let v: relationalStore.ValuesBucket = { + id: i, + name: 'zhangsan' + i, + age: 20, + salary: 5000 + 50 * i + }; + valueBucketArray[i] = v; + } + await taskpool.execute(create, context) + await taskpool.execute(insert, context, valueBucketArray) + let index = 0 + let ret = await taskpool.execute(query, context) as Array + for (let v of ret) { + console.info(`Row[${index}].id = ${v.id}`) + console.info(`Row[${index}].name = ${v.name}`) + console.info(`Row[${index}].age = ${v.age}`) + console.info(`Row[${index}].salary = ${v.salary}`) + index++ + } + await taskpool.execute(clear, context) + this.message = 'success'; + }) + } + .height('100%') + .width('100%') + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/pages/Index.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/pages/Index.ets new file mode 100755 index 0000000000..2876269cd6 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { CommonButton } from '../util/CommonButton'; +import resource from '../util/resource'; + +@Entry +@Component +struct Index { + aboutToAppear() { + } + + build() { + Scroll() { + Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }) { + Text(resource.resourceToString($r('app.string.Batch_data'))) + .padding('15vp') + .width('100%') + .fontSize('25fp') + .textAlign(TextAlign.Center) + CommonButton({ + buttonName: resource.resourceToString($r('app.string.Using_taskpool')), + buttonUrl: 'managers/UsingTaskPool' + }); + CommonButton({ + buttonName: resource.resourceToString($r('app.string.Using_sendable')), + buttonUrl: 'managers/UsingSendable' + }); + } + .padding('20vp') + .width('100%') + }.margin({ bottom: 60 }) + .width('100%') + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/CommonButton.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/CommonButton.ets new file mode 100755 index 0000000000..6281de3a8a --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/CommonButton.ets @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@ohos.router'; + +@Component +export struct CommonButton { + @State buttonName: string = ''; + @State buttonUrl: string = ''; + @State data: string = ''; + + build() { + Text(this.buttonName) + .id(this.buttonName) + .padding(px2vp(5)) + .fontSize(px2fp(25)) + .width('45%') + .height(40) + .backgroundColor('#04a4fc') + .fontColor(Color.White) + .textAlign(TextAlign.Center) + .borderRadius(15) + .margin(px2vp(5)) + .onClick(() => { + router.pushUrl({ + url: this.buttonUrl, + params: { + text: this.data, + buttonName: this.buttonName + } + }) + }) + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/resource.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/resource.ets new file mode 100755 index 0000000000..456c9d37a6 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/ets/util/resource.ets @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class P2PManager { + public resourceToString(resource: Resource):string { + return getContext(this).resourceManager.getStringSync(resource) + } +} + +// 默认导出let +let p2pManager = new P2PManager(); + +export default p2pManager as P2PManager; \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/module.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/module.json5 new file mode 100755 index 0000000000..776ce01475 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/color.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/color.json new file mode 100755 index 0000000000..d66f9a7d4a --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/string.json new file mode 100755 index 0000000000..084955e8c9 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "BatchDatabaseOperationsGuide" + }, + { + "name": "Batch_data", + "value": "批量数据写数据库场景" + }, + { + "name": "Using_taskpool", + "value": "使用TaskPool进行频繁数据库操作" + }, + { + "name": "Using_sendable", + "value": "使用Sendable进行大容量数据库操作" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/background.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/background.png new file mode 100755 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/foreground.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/media/foreground.png new file mode 100755 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/backup_config.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/backup_config.json new file mode 100755 index 0000000000..d742c2f96e --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/main_pages.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/main_pages.json new file mode 100755 index 0000000000..ef19509790 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,7 @@ +{ + "src": [ + "pages/Index", + "managers/UsingSendable", + "managers/UsingTaskPool" + ] +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/dark/element/color.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/dark/element/color.json new file mode 100755 index 0000000000..438d5bc43b --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/mock/mock-config.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/mock/mock-config.json5 new file mode 100755 index 0000000000..b9a78e2015 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100755 index 0000000000..352af779db --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it, expect, beforeAll } from '@ohos/hypium'; +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; +import resource from '../../../main/ets/util/resource'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; + +let want: Want; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + it('testUsingTaskPool', 0, async (done: Function) => { + console.log('uitest: UsingTaskPool begin'); + const driver = Driver.create(); + await driver.delayMs(1000); + const text = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.Using_taskpool')))); + await text.click(); + await driver.delayMs(1000); + const text1 = await driver.findComponent(ON.text('Hello World')); + await text1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('success')); + await driver.pressBack(); + done(); + }) + it('testUsingSendable', 0, async (done: Function) => { + console.log('uitest: UsingSendable begin'); + const driver = Driver.create(); + await driver.delayMs(1000); + const text = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.Using_sendable')))); + await text.click(); + await driver.delayMs(1000); + const text1 = await driver.findComponent(ON.text('Hello World')); + await text1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('success')); + await driver.pressBack(); + done(); + }) + }) +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/List.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/List.test.ets new file mode 100755 index 0000000000..1eac52fceb --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/module.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/module.json5 new file mode 100755 index 0000000000..9983b2ba4e --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/List.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/List.test.ets new file mode 100755 index 0000000000..f1186b1f53 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/LocalUnit.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/LocalUnit.test.ets new file mode 100755 index 0000000000..7fc57c77db --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigor/hvigor-config.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigor/hvigor-config.json5 new file mode 100755 index 0000000000..cef74543b1 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigorfile.ts b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigorfile.ts new file mode 100755 index 0000000000..2a5e543f19 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/oh-package.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/oh-package.json5 new file mode 100755 index 0000000000..eaef52736f --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/ohosTest.md b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/ohosTest.md new file mode 100755 index 0000000000..fc5ad24927 --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/ohosTest.md @@ -0,0 +1,9 @@ +# BatchDatabaseOperationsGuide 测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| -------------------------------- | --------------------- | --------------- | ---------------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 使用TaskPool进行频繁数据库操作 | 位于UsingTaskPool.ets | 点击Hello World | 1秒后页面显示“success” | 是 | Pass | +| 使用Sendable进行大容量数据库操作 | 位于UsingSendable.ets | 点击Hello World | 1秒后页面显示“success” | 是 | Pass | \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_1.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_1.png new file mode 100755 index 0000000000000000000000000000000000000000..0ab7dbb518ae6da89ce3e66fc498b8b62f360224 GIT binary patch literal 48787 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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_2.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/ApplicationMultithreading/BatchDatabaseOperationsGuide/screenshots/BatchDatabaseOperationsGuide_2.png new file mode 100755 index 0000000000000000000000000000000000000000..eec372bf473db501b0a4d46f656b76612b7d740a GIT binary patch literal 24533 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