| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| AppScope/ | 06-May-2025 | - | 35 | 32 | ||
| entry/ | 06-May-2025 | - | 1,917 | 1,743 | ||
| hvigor/ | 06-May-2025 | - | 38 | 36 | ||
| screenshots/ | 06-May-2025 | - | ||||
| .gitignore | D | 06-May-2025 | 133 | 12 | 12 | |
| README.md | D | 06-May-2025 | 6.6 KiB | 110 | 78 | |
| build-profile.json5 | D | 06-May-2025 | 1.4 KiB | 58 | 57 | |
| code-linter.json5 | D | 06-May-2025 | 958 | 35 | 34 | |
| hvigorfile.ts | D | 06-May-2025 | 843 | 22 | 5 | |
| oh-package.json5 | D | 06-May-2025 | 834 | 26 | 24 | |
| ohosTest.md | D | 06-May-2025 | 1.9 KiB | 13 | 11 |
README.md
1# ArkTS 应用多线程开发实践案例 2 3### 介绍 4 5#### 使用TaskPool进行频繁数据库操作 6 7对于需要频繁数据库操作的场景,由于读写数据库存在耗时,因此推荐在子线程中操作,避免阻塞UI线程。 8 9通过ArkTS提供的TaskPool能力,可以将数据库操作任务移到子线程中。 10 11#### 业务模块并发加载场景 12 13在应用启动过程中,会有多个业务模块需要加载,例如应用的定位、打车、导航等不同的模块,如果全部在UI主线程初始化,则会严重影响冷启动耗时。此时需要在不同子线程并行化加载这些模块功能,降低启动耗时。 14 15通过使用ArkTS提供的TaskPool能力,可以将不同业务初始化任务移到子线程中,业务模块通过下沉C++实现成[NativeBinding对象](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/transferabled-object.md)、或者在ArkTS层定义[Sendable对象](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/arkts-sendable.md),就可以将初始化的模块返回UI主线程调用,实现如下。 16 17#### 全局配置项功能场景 18 19对于需要使用进程单例的场景,例如不同并发实例间需要数据保持一致的全局配置项业务,可以采用共享模块来实现。 20 21#### ArkUI数据更新场景 22 23当需要网络下载或者本地生成的数据需要发送到UI线程进行展示时,因为ArkUI的标注和[@Sendable装饰器](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/arkts-sendable.md#sendable装饰器)不能同时修饰变量和对象,所以对于此类场景,需要使用[makeObserved](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/quick-start/arkts-new-makeObserved.md)在ArkUI中导入可观察的Sendable共享数据。 24 25#### ArkUI瀑布流渲染场景 26 27此处提供使用任务池[TaskPool](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkts/js-apis-taskpool.md)提升[WaterFlow瀑布流](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-waterflow.md)渲染性能的开发指导。UI线程查询数据库数据,并将数据渲染到瀑布流组件,数据过大时会导致UI线程长时间等待,影响用户体验。因此,可以将数据查询操作放到子线程中,并通过TaskPool的接口返回数据给UI线程。 28 29该工程中展示的代码详细描述可查如下链接: 30 31- [批量数据写数据库场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/batch-database-operations-guide.md) 32- [业务模块并发加载场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/concurrent-loading-modules-guide.md) 33- [全局配置项功能场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/global-configuration-guide.md) 34- [ArkUI数据更新场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/makeobserved-sendable.md) 35- [ArkUI瀑布流渲染场景](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/taskpool-waterflow.md) 36 37### 效果预览 38 39| 首页 | 执行及结果 | 40| :----------------------------------------------------------: | :----------------------------------------------------------: | 41| <img src="./screenshots/PracticalCases_1.png" style="zoom:33%;" /> | <img src="./screenshots/PracticalCases_2.png" style="zoom:33%;" /> | 42 43### 使用说明 44 451. 在主界面,点击任意按钮进行跳转,点击Hello World执行程序 462. 执行结果会即时反馈在屏幕中央,并在控制台打印log。 47 48### 工程目录 49 50``` 51entry/src/ 52 ├── main 53 │ ├── ets 54 │ │ ├── entryability 55 │ │ ├── entrybackupability 56 │ │ ├── managers 57 │ │ ├── ConcurrentLoadingModulesGuide.ets // 业务模块并发加载场景示例代码 58 │ │ ├── Config.ets // 全局配置项功能场景资源代码 59 │ │ ├── GlobalConfigurationGuide.ets // 全局配置项功能场景示例代码 60 │ │ ├── MakeobservedSendable.ets // ArkUI数据更新场景示例代码 61 │ │ ├── Mock.ets // ArkUI瀑布流渲染场景资源代码 62 │ │ ├── SendableData.ets // ArkUI数据更新场景资源代码 63 │ │ ├── SharedValuesBucket.ets // 使用Sendable进行大容量数据库操作 64 │ │ ├── UsingSendable.ets // 使用Sendable进行大容量数据库操作示例代码 65 │ │ ├── UsingTaskPool.ets // 使用TaskPool进行频繁数据库操作示例代码 66 │ │ ├── WaterfallRendering.ets // ArkUI瀑布流渲染场景示例代码资源代码 67 │ │ ├── WaterFlowDataSource.ets // ArkUI瀑布流渲染场景资源代码 68 │ │ ├── pages 69 │ │ ├── Index.ets // 首页 70 │ │ ├── sdk 71 │ │ ├── Calculator.ets // 业务模块并发加载场景资源代码 72 │ │ ├── TimerSdk.ets // 业务模块并发加载场景资源代码 73 │ │ ├── util 74 │ │ ├── CommonButton.ets // 首页跳转UI 75 │ │ ├── resource.ets // 资源引用转换 76 │ ├── module.json5 77 │ └── resources 78 ├── ohosTest 79 │ ├── ets 80 │ │ ├── test 81 │ │ ├── Ability.test.ets // 自动化测试代码 82``` 83 84### 相关权限 85 86不涉及。 87 88### 依赖 89 90不涉及。 91 92### 约束与限制 93 941.本示例仅支持标准系统上运行, 支持设备:RK3568。 95 962.本示例为Stage模型,支持API14版本SDK,版本号:5.0.2.57,镜像版本号:OpenHarmony_5.0.2.58。 97 983.本示例需要使用DevEco Studio 5.0.1 Release (Build Version: 5.0.5.306, built on December 6, 2024)及以上版本才可编译运行。 99 100### 下载 101 102如需单独下载本工程,执行如下命令: 103 104```` 105git init 106git config core.sparsecheckout true 107echo code/DocsSample/ArkTS/ArkTsConcurrent/ApplicationMultithreadingDevelopment/PracticalCases > .git/info/sparse-checkout 108git remote add origin https://gitee.com/openharmony/applications_app_samples.git 109git pull origin master 110````