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