• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3432

feature/06-May-2025-12,73111,752

hvigor/06-May-2025-3433

product/phone/entry/06-May-2025-3,5763,298

screenshots/device/06-May-2025-

.gitignoreD06-May-2025119 1111

README.mdD06-May-202527.1 KiB455351

build-profile.json5D06-May-20252.7 KiB124123

hvigorfile.tsD06-May-2025843 225

hvigorwD06-May-20252.1 KiB6228

hvigorw.batD06-May-20252.1 KiB7960

oh-package-lock.json5D06-May-20251 KiB2827

oh-package.json5D06-May-2025234 1312

ohosTest.mdD06-May-20255.1 KiB3027

README.md

1# 性能示例
2
3### 介绍
4
5本示例集成了条件渲染、动态加载以及HiDumper等场景来介绍如何提升应用性能。
6
7### 效果预览
8| 性能示例主页                          |
9|---------------------------------|
10| ![](screenshots/device/Home.jpeg) |
11
12HiDumper使用说明:
131.点击性能示例主页的**HiDumper**按钮,进入**HiDumper查看组件信息**场景页。
14
151.点击HiDumper查看组件信息场景页的**查看应用组件树**进入场景页。
16
172.点击HiDumper查看组件信息场景页的**查看if/else组件**按钮,在场景中点击**显隐切换**按钮,查看图片显示隐藏。
18
193.点击HiDumper查看组件信息场景页的**查看visibility属性**按钮,在场景中依次点击**Visible**、**Hidden**、**Visible**、**None**,查看图片显示和隐藏。
20
21常规加载页面使用说明:
22
231.点击性能示例主页的**StaticImport**按钮,进入**常规加载入口**场景页。
24
252.点击常规加载入口的**点击跳转常规加载案例**按钮,进入**常规加载主页**。
26
273.点击常规加载主页的**pageOne**按钮,进入**常规加载子页面**。
28
29动态加载页面使用说明:
30
311.点击性能示例主页的**DynamicImport**按钮,进入**动态加载入口**场景页。
32
332.点击动态加载入口页的**点击跳转动态加载案例**按钮,进入**动态加载主页**。
34
353.点击动态加载主页的**pageOne**按钮,进入**动态加载子页面**。
36
37ifOrVisibility使用说明:
38
391.点击性能示例主页的**ifOrVisibility**按钮,进入**合理选择条件渲染合显隐控制**场景页,其下有四组场景,八个页面。
40
412.分别点击**频繁切换:显隐控制页面** ,**频繁切换:条件渲染页面** ,进入频繁切换场景,可以通过点击**Switch visible and hidden**按钮,实现组件显示与隐藏间的切换,对比完成时延。
42
433.分别点击**首页渲染:条件渲染页面** ,**首页渲染:显隐控制页面**,进入首页渲染场景,可以通过点击**Show the Hidden on start**按钮,可以显示首页渲染时,初始被隐藏的组件,对比首页加载渲染完成时延。
44
454.分别点击**部分修改:条件渲染+容器限制页面**、**部分修改:条件渲染模块**,进入部分修改场景,可以通过点击**Switch Hidden and Show**按钮,可以对长列表中Text组件做部分修改,对比完成时延。
46
475.分别点击**复杂子树:条件渲染+组件复用页面**、**复杂子树:条件渲染页面**,进入复杂子树场景,可以通过点击**Change FlexAlign**按钮,可以Flex组件中子组件布局方式,对比布局修改完成时延。
48
49Grid高性能使用说明:
50
511.点击性能示例主页的**使用LazyFoEach,cachedCount,组件复用**按钮,进入**懒加载+cachedCount+组件复用页面**场景页。
52
532.点击性能示例主页的**使用columnStart**按钮,进入**使用columnStart,columnEnd页面**场景页,点击**scrollToIndex:1900**按钮,通过性能打点方式,查看滑动耗时。
54
553.点击性能示例主页的**使用GridLayoutOptions**按钮,进入**使用GridLayoutOptions页面**场景页,点击**scrollToIndex:1900**按钮,通过性能打点方式,查看滑动耗时。
56
57SmartPerfEditor使用说明:
58
591.打开显隐切换页面,点击**显示/隐藏Image**按钮,使用DrawingDoc录制回放功能抓取绘制信息。
60
61SmartPerfHost使用说明:
62
631.点击smartPerfHost示例主页的**SmartPerfHost**按钮,进入**SmartPerfHost查看组件信息**场景页。
64
652.点击SmartPerfHost查看FrameTimeline优化前场景页的**FrameTimeline优化前代码**按钮进入场景页。
66
673.点击SmartPerfHost查看FrameTimeline优化后场景页的**FrameTimeline优化后代码**按钮进入场景页。
68
694.点击SmartPerfHost查看AppStartup优化前场景页的**AppStartup优化前代码**按钮进入场景页。
70
715.点击SmartPerfHost查看AppStartup优化前场景页的**AppStartup优化后代码**按钮进入场景页。
72
73Trace使用说明:
74
751.点击性能示例主页的**Trace**按钮,进入**懒加载示例**场景页。
76
77BackgroundTask使用说明:
78
791.点击性能示例主页的**BackgroundTask**按钮,进入**后台任务**场景页,包括**短时任务**和**长时任务**两个子页面,同意授予通知权限。
80
812.点击**短时任务**按钮进入场景页,点击**开始计算**按钮执行任务。
82
833.点击**长时任务**按钮进入场景页,授予通知权限和定位权限,和点击**开启定位服务**按钮开启定位,点击**关闭定位服务**关闭定位。
84
85WaterFlow使用说明:
86
871.点击性能示例主页的**WaterFlow**按钮,进入**WaterFlow**场景页
88
89多线程共享内存页面使用说明:
90
911.点击性能示例主页的**MemoryShared**按钮,进入**多线程共享内存入口**场景页。
92
932.点击多线程共享内存入口页的**原子操作对比**按钮,进入**原子操作主页**。
94
953.点击多线程共享内存入口页的**锁的使用**按钮,进入**锁的使用子页面**。
96
97Native跨线程调用使用说明:
98
991.点击性能示例主页的**NativeThreadsCallJS**按钮,进入**Native跨线程调用**场景页
100
1012.点击Native跨线程调用页的**threadSafeTest**按钮,验证使用安全函数跨线程调用。
102
1033.点击Native跨线程调用页的**libuvTest**按钮,验证使用libuv跨线程调用。
104
105多线程间大数据传输使用说明:
106
1071.点击性能示例主页的**ThreadDataTransfer**按钮,进入**多线程数据传输入口**场景页。
108
1092.拖动**任务数**滑动条调整线程任务数,点击**传参方式**按钮,改变线程传参方式。
110
1113.拖动**饱和度**滑动条,调整图片饱和度。
112
113主线程和子线程的通信使用说明:
114
1151.点击性能示例主页面的**ThreadCommunication**按钮,进入**主线程和子线程通信**场景页。
116
1172.点击**场景一:独立的耗时任务**按钮,进入**独立的耗时任务**场景页,点击**加载图片**按钮。
118
1193.点击**场景二:多个任务执行结果统一返回**按钮,进入**多个任务执行结果统一返回**场景页,点击**加载图片**按钮。
120
1214.点击**场景三:TaskPool和主线程的即时通信**按钮,进入**TaskPool和主线程的即时通信**场景页,点击**加载图片**按钮。
122
1235.点击**场景四:Worker和主线程的即时通信**按钮,进入**Worker和主线程的即时通信**场景页,点击**将图片变成4个**按钮。
124
1256.点击**场景五:子线程同步调用主线程的接口**按钮,进入**子线程同步调用主线程的接口**场景页,点击**加载图片**按钮。
126
127Web组件提升性能使用说明:
128
1291.连接网络后点击性能示例主页的**WebPerformance**按钮,进入**Web组件提升性能**场景页。
130
1312.点击**常规Web首页**按钮进入常规加载Web首页。
132
1333.点击**进入网页**按钮进入常规Web组件页。
134
1354.点击**下一页**按钮进入常规Web切换页。
136
1375.点击**优化Web首页**按钮进入优化加载Web首页。
138
1396.点击**进入网页**按钮进入优化Web组件页。
140
1417.点击**下一页**按钮进入优化Web切换页。
142
143### 工程目录
144
145```
146features
147|---/dynamicImport/src/main/ets                      // 动态加载HAR共享包
148|---|---/pages
149|   |   |---DynamicContentPageOne.ets                // 动态加载子页面
150|   |   |---DynamicEntryView.ets                     // 动态加载入口页面
151|   |   |---DynaHome.ets                             // 动态加载主页
152|---/grid/src/main/ets                               // grid类功能HAR共享包
153|   |---/view
154|   |   |---GridView.ets                             // 场景主页面模块
155|   |   |---GridLazyForEachView.ets                  // 懒加载+cachedCount+组件复用模块
156|   |   |---GridColumnStartView.ets                  // 使用columnStart,columnEnd模块
157|   |   |---GridLayoutOptionsView.ets                // 使用GridLayoutOptions模块
158|---/hiDumper/src/main/ets                           // 列表类功能HAR共享包
159|   |---/view
160|   |   |---ConditionView.ets                        // 显隐切换模块
161|   |   |---GridView.ets                             // 查看组件树模块
162|   |   |---HidumperHomeView.ets                     // 场景主页面模块
163|   |   |---VisibilityView.ets                       // 查看Visibility属性模块
164|---/ifOrVisibility/src/main/ets                     // 列表类功能HAR共享包
165|   |---/util
166|   |   |---/Constants.ets                           // 常量
167|   |---/model
168|   |   |---/SceneData.ets                           // 数据类型
169|   |   |---/SceneMsg.ets                            // 本地数据
170|   |---/view
171|   |   |---HidumperHomeView.ets                      // 场景主页面模块
172|   |   |---/IfForStartUp
173|   |   |   |---BetterUseIf.ets                       // 首页渲染:条件渲染模块
174|   |   |   |---WorseUseVisibility.ets                // 首页渲染:显隐控制模块
175|   |   |---/Reusable
176|   |   |   |---AlignContentFlex.ets                  // Text子组件
177|   |   |   |---IfWithoutReusable.ets                 // 复杂子树:条件渲染+模块
178|   |   |   |---IfWithReusable.ets                    // 复杂子树:条件渲染+组件复用模块
179|   |   |   |---MockComplexReusableSubBranch.ets      // 模拟复用复杂子组件
180|   |   |   |---MockComplexSubBranch.ets              // 模拟复杂子组件
181|   |   |---/StackForRenderControl
182|   |   |   |---RenderControlWithoutStack.ets         // 部分修改:条件渲染+容器限制模块
183|   |   |   |---RenderControlWithStack.ets            // 部分修改:条件渲染模块
184|   |   |---/VisibilityForAnimate
185|   |   |   |---BetterUseVisibility.ets               // 频繁切换:显隐控制模块
186|   |   |   |---WorseUseIf.ets                        // 频繁切换:条件渲染
187|---/smartPerfEditor/src/main/ets                     // 显隐类功能HAR共享包
188|   |---/view
189|   |   |---SmartPerfEditorView.ets                   // 显隐切换模块
190|---/smartPerfHost/src/main/ets                       // SmartPerfHost功能HAR共享包
191|   |---/view
192|   |   |---AppStartupBeforeOptimization.ets          // 冷启动耗时优化前模块
193|   |   |---AppStartupAfterOptimization.ets           // 冷启动耗时优化后模块
194|   |   |---FrameTimelineBeforeOptimization.ets       // 丢帧测试优化前模块
195|   |   |---FrameTimelineAfterOptimization.ets        // 丢帧测试优化后模块
196|   |   |---SmartPerfHostHomeView.ets                 // 场景主页面模块
197|---/staticImport/src/main/ets                        // 常规加载HAR共享包
198|---|---/pages
199|   |   |---StaticContentPageOne.ets                  // 常规加载子页面
200|   |   |---StaticContentPageTwo.ets                  // 常规加载子页面
201|   |   |---StaticEntryView.ets                       // 常规加载入口页面
202|   |   |---StaticHome.ets                            // 常规加载主页
203|---/ThreadCommunication/src/main/ets                 // 主线程和子线程通信
204|---|---/pages
205|   |   |---IconItemSource.ets                        // 图片信息类
206|   |   |---IconView.ets                              // 图片Item组件
207|   |   |---IndependentTask.ets                       // 独立的耗时任务页面
208|   |   |---MultiTask.ets                             // 多任务统一返回页面
209|   |   |---TaskSendDataUsage.ets                     // TaskPool和主线程的即时通信页面
210|   |   |---ThreadCommunicationHomePage.ets           // 主线程和子线程通信入口页面
211|   |   |---WorkerCallGlobalUsage.ets                 // 子线程同步调用主线程的接口页面
212|   |   |---WorkerUsage.ets                           // Worker和主线程的即时通信页面
213|---/trace/src/main/ets                               // Trace功能HAR共享包
214|---|---/pages
215|   |   |---LazyForEachPage.ets                       // 懒加载示例场景页面
216|---|---/view
217|   |   |---IconView.ets                              // 懒加载示例场景子页面
218|---|---/viewmodel
219|   |   |---BasicDataSource.ets                       // 封装列表数据方法
220|---/backgroundTask/src/main/ets                      // backgroundTask类功能HAR共享包
221|   |---/view
222|   |   |---BackgroundTaskHomeView.ets                // 场景主页面模块
223|   |   |---TransientTaskView.ets                     // 短时任务页面
224|   |   |---LongTermTaskView.ets                      // 长时任务页面
225---/waterFlow/src/main/ets                            // waterFlow功能HAR共享包
226|   |---/pages
227|   |   |---Index.ets                                 // 场景主页面模块
228|   |   |---WaterFlowDataSource.ets                   // 数据源
229---/nativeThreadsCallJS/src/main/ets                  // native跨线程调用功能HAR共享包
230|   |---/pages
231|   |   |---Index.ets                                 // 场景主页面模块
232---/nativeThreadsCallJS/src/main/cpp                  // native跨线程调用功能native功能模块
233|   |---/types
234|   |   |---hello.cpp                                 // 场景native功能代码
235products/phone/entry/src/main/ets
236|---/entryability
237|   |---EntryAbility.ts                               // 封装整个模块启用,监听Ability对应的窗口等逻辑
238|---/model
239|   |---/DataType.ets                                 // 数据类型
240|   |---/MockData.ets                                 // 本地数据
241|---pages
242|   |---/dynamicImport
243|   |   |---DynamicEntryView.ets                      // 动态加载入口页面
244|   |   |---DynamicHome.ets                           // 动态加载主页
245|   |   |---DynamicContentPageOne.ets                 // 动态加载内容页
246|   |---/grid
247|   |   |---GridPage.ets                              // 场景主页面
248|   |   |---GridLazyForEachPage.etss                  // 懒加载+cachedCount+组件复用页面
249|   |   |---GridColumnStartPage.ets                   // 使用columnStart,columnEnd页面
250|   |   |---GridLayoutOptionsPage.ets                 // 使用GridLayoutOptions页面
251|   |---/hiDumper
252|   |   |---ConditionPage.ets                         // 显隐切换页面
253|   |   |---GridPage.ets                              // 查看组件树页面
254|   |   |---HidumperHomePage.ets                      // 场景主页面
255|   |   |---VisibilityPage.ets                        // 查看Visibility属性页面
256|   |---/ifOrVisibility
257|   |   |---IfOrVisibilityPage.ets                    // 合理选择条件渲染首页
258|   |   |---AnimateBetterUseVisibility.ets            // 频繁切换:显隐控制页面
259|   |   |---AnimateWorseUseIf.ets                     // 频繁切换:条件渲染页面
260|   |   |---IfBetterWithReusable.ets                  // 首页渲染:条件渲染页面
261|   |   |---IfWorseWithoutReusable.ets                // 首页渲染:显隐控制页面
262|   |   |---RenderControlBetterWithStack.ets          // 部分修改:条件渲染+容器限制页面
263|   |   |---RenderControlWorseWithoutStack.ets        // 部分修改:条件渲染页面
264|   |   |---StartBetterUseIf.ets                      // 复杂子树:条件渲染+组件复用页面
265|   |   |---StartWorseUseVisibility.ets               // 复杂子树:条件渲染页面
266|   |---/smartPerfEditor
267|   |   |---SmartPerfEditorPage.ets                   // 显隐切换页面
268|   |---/smartPerfHost
269|   |   |---AppStartupBeforeOptimizationPage.ets      // 冷启动耗时优化前页面
270|   |   |---AppStartupAfterOptimizationPage.ets       // 冷启动耗时优化后页面
271|   |   |---FrameTimelineBeforeOptimizationPage.ets   // 丢帧测试优化前页面
272|   |   |---FrameTimelineAfterOptimizationPage.ets    // 丢帧测试优化后页面
273|   |   |---SmartPerfHostPage.ets                     // 场景主页面
274|   |---/staticImport
275|   |   |---StaticEntryView.ets                       // 常规加载入口页面
276|   |   |---StaticHome.ets                            // 常规加载主页
277|   |---/backgroundTask
278|   |   |---BackgroundTaskPage.ets                    // 后台任务入口页面
279|   |   |---TransientTask.ets                         // 短时任务页面
280|   |   |---LongTermTask.ets                          // 长时任务页面
281|   |---/ThreadCommunication
282|   |---|---/workers
283|   |   |---|---Worker.ts                             // worker子线程
284|   |   |---IndependentTaskPage.ets                   // 独立的耗时任务页面
285|   |   |---MultiTaskPage.ets                         // 多任务统一返回页面
286|   |   |---TaskSendDataUsagePage.ets                 // TaskPool和主线程的即时通信页面
287|   |   |---ThreadCommunicationHomePage.ets           // 主线程和子线程通信入口页面
288|   |   |---WorkerCallGlobalUsagePage.ets             // 子线程同步调用主线程的接口页面
289|   |   |---WorkerUsagePage.ets                       // Worker和主线程的即时通信页面
290|   |---/trace
291|   |   |---TracePage.ets                             // 懒加载示例首页
292|   |---/ThreadDataTransfer
293|   |   |---ThreadDataTransferHomePage.ets            // 线程间大数据传输首页
294|   |---/waterFlow
295|   |   |---WaterFlowPage.ets                         // WaterFlow示例首页
296|   |---/memoryShared
297|   |   |---AtomicsUsage.ets                          // 原子操作页面
298|   |   |---LockUsage.ets                             // 锁应用页面
299|   |   |---MemorySharedHome.ets                      // 多线程共享内存入口页面
300|   |---/nativeThreadsCallJS
301|   |   |---NativeThreadsCallJS.ets                   // native跨线程调用示例首页
302|   |---/webPerformance
303|   |   |---WebHomePage.ets                           // Web提升性能示例首页
304|   |   |---WebBrowserPage.ets                        // Web组件网页
305|   |   |---WebInitializedPage.ets                    // Web优化性能主页
306|   |   |---WebUninitializedPage.ets                  // Web常规主页
307|   |---/Index
308|---/utils
309|   |---Logger.ets                                    // 封装整个日志
310
311```
312
313### 具体实现
314
315* HiDumper场景模块
316
317  * 查看组件树
318    * 在页面上添加Grid,每个GridItem嵌套多个Stack,然后通过HiDumper抓取组件树信息。
319    * 源码链接:[GridView.ets](feature/hiDumper/src/main/ets/view/GridView.ets)
320
321  * 查看if/else组件
322    * 在页面上添加**显隐切换**按钮,添加一张图片,点击按钮后通过HiDumper抓取组件树信息。
323    * 源码链接:[ConditionView.ets](feature/hiDumper/src/main/ets/view/ConditionView.ets)
324
325  * 查看visibility属性
326    * 在页面上添加**Visible**、**Hidden**、**None**按钮,添加一张图片,点击按钮后通过HiDumper抓取组件树信息。
327    * 源码链接:[VisibilityView.ets](feature/hiDumper/src/main/ets/view/VisibilityView.ets)
328
329* Navigation常规加载页面模块
330
331  * 在Navigation组件加载内容页时,使用`import`常规加载子页面。
332  * 源码链接:[StaticHome.ets](feature/staticImport/src/main/ets/pages/StaticHome.ets)
333
334* Navigation动态加载页面模块
335
336  * 在Navigation组件加载内容页时,使用`await import`实现动态按需加载。
337  * 源码链接:[DynamicHome.ets](feature/dynamicImport/src/main/ets/pages/DynamicHome.ets)
338
339* IfOrVisibility四个场景,分别正反例,八个页面:
340  * 针对显示和隐藏间频繁切换的场景
341    * 反例:使用条件循环实现显示和隐藏间的切换; [WorseUseIf.ets](feature\ifOrVisibility\src\main\ets\view\VisibilityForAnimate\WorseUseIf.ets)
342    * 正例:使用显隐控制实现显示和隐藏间的切换; [BetterUseVisibility.ets](feature\ifOrVisibility\src\main\ets\view\VisibilityForAnimate\BetterUseVisibility.ets)
343
344  * 针对应用冷启动,加载绘制首页
345    * 反例:对于首页初始时,不需要显示的组件,通过显隐控制进行隐藏; [WorseUseVisibility.ets](feature\ifOrVisibility\src\main\ets\view\IfForStartUp\WorseUseVisibility.ets)
346    * 正例:对于首页初始时,不需要显示的组件,通过条件渲染进行隐藏; [BetterUseIf.ets](feature\ifOrVisibility\src\main\ets\view\IfForStartUp\BetterUseIf.ets)
347  * 针对反复切换条件渲染的控制分支,但切换项仅涉及页面中少部分组件的场景
348    * 反例:没有使用容器限制条件渲染组件的刷新范围; [RenderControlWithoutStack.ets](feature\ifOrVisibility\src\main\ets\view\StackForRenderControl\RenderControlWithoutStack.ets)
349    * 正例:使用容器限制条件渲染组件的刷新范围; [RenderControlWithStack.ets](feature\ifOrVisibility\src\main\ets\view\StackForRenderControl\RenderControlWithStack.ets)
350
351  * 针对反复切换条件渲染的控制分支,且控制分支中的每种分支内,组件子树结构都比较复杂的场景
352    * 反例:没有使用组件复用实现条件渲染控制分支中的复杂子组件; [IfWithoutReusable.ets](feature\ifOrVisibility\src\main\ets\view\Reusable\IfWithoutReusable.ets)
353    * 正例:使用组件复用实现条件渲染控制分支中的复杂子组件; [IfWithReusable.ets](feature\ifOrVisibility\src\main\ets\view\Reusable\IfWithReusable.ets)
354
355* 高性能Grid二个场景,三个页面:
356  * 针对Grid中使用懒加载,cachedCount,组件复用的场景
357    * 在页面上添加Grid,GridItem使用懒加载,设置cachedCount,同时对GridItem中的子组件使用组件复用; [GridColumnStartView.ets](feature\grid\src\main\ets\view\GridLazyForEachView.ets)
358
359  * 针对Grid中使用scrollToIndex滑动到指定位置的场景
360    * 反例:使用columnStart,columnEnd设置GridItem大小,使用scrollToIndex滑动到指定GirdItem,通过性能打点方式查看滑动耗时情况; [GridColumnStartView.ets](feature\grid\src\main\ets\view\GridColumnStartView.ets)
361    * 正例:使用GridLayoutOptions设置GridItem大小,使用scrollToIndex滑动到指定GirdItem,通过性能打点方式查看滑动耗时情况; [GridLayoutOptionsView.ets](feature\grid\src\main\ets\view\GridLayoutOptionsView.ets)
362
363* SmartPerfEditor一个场景,一个页面:
364  * 针对显示图片中查看是否存在冗余绘制的场景
365    * 在页面上添加显隐切换按钮,点击按钮后,显示一张图片,通过DrawingDoc录制回放功能抓取绘制信息; [SmartPerfEditorView.ets](feature\smartPerfEditor\src\main\ets\view\SmartPerfEditorView.ets)
366
367* SmartPerfHost页面模块
368  * 应用冷启动,加载绘制页面
369    * 应用优化前[AppStartupBeforeOptimization.ets](feature/smartPerfEditor/src/main/ets/view/AppStartupBeforeOptimization.ets)
370    * 应用优化后[AppStartupAfterOptimization.ets](feature/smartPerfEditor/src/main/ets/view/AppStartupAfterOptimization.ets)
371  * 列表场景丢帧问题优化
372    * 应用优化前[FrameTimelineBeforeOptimization.ets](feature/smartPerfEditor/src/main/ets/view/FrameTimelineBeforeOptimization.ets)
373    * 应用优化后[FrameTimelineAfterOptimization.ets](feature/smartPerfEditor/src/main/ets/view/FrameTimelineAfterOptimization.ets)
374
375* 后台任务页面模块
376  * 短时任务
377    * 申请短时任务,应用后台执行耗时计算任务
378    * 源码链接:[TransientTaskView.ets](feature/backgroundTask/src/main/ets/view/TransientTaskView.ets)
379  * 长时任务
380    * 模拟后台导航定位场景,申请定位类型长时任务,使用@ohos.geoLocationManager实现位置定位功能,必须在联网环境才能获取定位数据
381    * 源码链接:[LongTermTaskView.ets](feature/backgroundTask/src/main/ets/view/LongTermTaskView.ets)
382
383* 多线程共享内存页面模块
384  * 原子操作场景
385    * 使用原子或非原子操作,实现多线程操作累加器
386    * 源码链接:[AtomicsUsage.ets](feature/memoryShared/src/main/ets/pages/AtomicsUsage.ets)
387  * 锁应用场景
388    * 使用或不适用锁,实现多线程写入文件
389    * 源码链接:[LockUsage.ets](feature/memoryShared/src/main/ets/pages/LockUsage.ets)
390
391* 多线程间大数据传输页面模块
392  * 图片调整饱和度
393    * 通过不同参数,实现多线程修改图片
394    * 源码链接:[TreadUtil.ets](feature/ThreadDataTransfer/src/main/ets/utils/TreadUtil.ets)
395
396* Web提升性能页面模块
397  * 常规场景
398    * 使用Web组件常规实现网页加载
399    * 源码链接:[WebUninitializedPage.ets](feature/webPerformance/src/main/ets/pages/WebUninitialized.ets)
400  * 优化场景
401    * 使用预加载预连接提升web性能
402    * 源码链接:[WebInitializedPage.ets](feature/webPerformance/src/main/ets/pages/WebInitialized.ets)
403
404* 主线程和子线程间的通信
405  * 将独立的耗时任务放在子线程中执行
406    * 使用TaskPool实现
407    * 源码链接:[IndependentTask.ets](feature/ThreadCommunication/src/main/ets/pages/IndependentTask.ets)
408  * 多个任务一并返回结果
409    * 使用TaskPool+TaskGroup实现
410    * 源码链接:[MultiTask.ets](feature/ThreadCommunication/src/main/ets/pages/MultiTask.ets)
411  * Task和主线程的数据通信
412    * 使用TaskPool中的sendData()和onReceiveData()接口实现
413    * 源码链接:[TaskSendDataUsage.ets](feature/ThreadCommunication/src/main/ets/pages/TaskSendDataUsage.ets)
414  * 子线程同步调用主线程的接口
415    * 在Worker中使用callGlobalCallObjectMethod()接口实现
416    * 源码链接:
417      * [WorkerCallGlobalUsage.ets](feature/ThreadCommunication/src/main/ets/pages/WorkerCallGlobalUsage.ets)
418      * [Worker.ts](product/phone/entry/src/main/ets/pages/ThreadCommunication/workers/Worker.ts)
419  * Worker和主线程的数据通信
420    * 使用Worker的postMessage()和onmessage()接口实现
421    * 源码链接:
422      * [WorkerUsage.ets](feature/ThreadCommunication/src/main/ets/pages/WorkerUsage.ets)
423      * [Worker.ts](product/phone/entry/src/main/ets/pages/ThreadCommunication/workers/Worker.ts)
424
425### 相关权限
426
427ohos.permission.INTERNET
428ohos.permission.LOCATION
429ohos.permission.LOCATION_IN_BACKGROUND
430ohos.permission.APPROXIMATELY_LOCATION
431ohos.permission.KEEP_BACKGROUND_RUNNING
432
433### 依赖
434
435不涉及。
436
437### 约束与限制
438
4391.本示例已适配API version 10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0Release)。
440
4412.本示例需要使用DevEco Studio 版本号(4.0Release)及以上版本才可编译运行。
442
443### 下载
444
445如需单独下载本工程,执行如下命令:
446
447```
448
449 git init
450 git config core.sparsecheckout true
451 echo code/Performance/PerformanceLibrary/ > .git/info/sparse-checkout
452 git remote add origin https://gitee.com/openharmony/applications_app_samples.git
453 git pull origin master
454
455```