• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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````