讨论广场 问答详情
如何使用SDK API 23+的Sendable对象在TaskPool多线程中处理换乘方案的并发计算
梦在远方 2026-06-11 17:36:11
109 评论 分享
harmonyos

在公交地铁类应用的Stage模型中,如何使用SDK API 23+的Sendable对象在TaskPool多线程中处理换乘方案的并发计算(如多线路组合换乘路径规划、时间/距离/换乘次数多目标优化)和大量站点数据的批量检索,并安全地传递到UI主线程进行换乘方案列表渲染和地图路线绘制?

109 评论 分享
写回答
全部评论(1)

在公交地铁应用中处理换乘方案并发计算的场景:

首先用@Sendable装饰RouteQuery类(包含起点坐标、终点坐标、出行偏好:最快/最少换乘/最少步行)、TransitPlan类(包含线路组合数组、总用时、总距离、换乘次数、步行距离、票价估算)和StationSearchResult类(包含匹配站点列表、距离、所属线路),确保对象可安全跨线程传递而无需序列化开销。

用户输入起点和终点后,主线程将查询条件封装为@Sendable的RouteQuery实例,通过taskpool.execute提交到多个Worker线程并行计算不同偏好的换乘方案(一个Worker计算最快方案、一个计算最少换乘方案、一个计算最少步行方案);

同时将站点模糊搜索任务提交到另一个Worker线程执行。各Worker线程完成后返回@Sendable的TransitPlan和StationSearchResult实例,主线程接收后更新@Local状态触发UI渲染换乘方案对比列表(展示各方案的用时/换乘次数/步行距离/票价对比)和地图路线绘制(使用Map组件绘制各方案的线路轨迹和换乘站点标注)。

相比传统序列化方式,Sendable避免了大量站点和线路数据在跨线程时的拷贝开销,在城市500+条线路的换乘计算场景下方案生成延迟降低约55%。

1
2026-06-11 17:40:29