错误处理与可观测性
HDMapSDK 使用激活状态和查询 Status 区分数据准备、无数据、授权、生命周期和持久数据问题。路线关联与交通能力还需结合导航支持信号判断,不能由静态地图服务状态推断其可用性。
服务状态
Status |
含义 | 应用处理 |
|---|---|---|
OK |
调用成功 | 继续检查返回对象、数组和缺失值 |
InvalidParameter |
输入参数非法 | 修复坐标、范围、ID 或配置 |
DataPending |
数据正在准备或下载 | 仅对幂等查询执行有界重试 |
DataNotFound |
当前版本、覆盖或缓存没有数据 | 进入无高精数据路径 |
Timeout |
调用超过配置阈值 | 检查资源和网络后,在总截止时间内有限重试 |
ServiceUnavailable |
服务尚不可用,或句柄已经调用 shutdown() |
检查生命周期;不再向已关闭句柄提交请求 |
InternalError |
SDK 内部异常 | 停止受影响流程并记录脱敏上下文 |
NotActivated |
激活尚未完成或无有效激活 | 恢复激活后重新创建服务 |
PermissionDenied |
当前授权不允许使用 | 核对产品授权、设备身份和凭据 |
DataError |
已持久化数据损坏 | 停止常规查询并执行受控数据恢复 |
仅在成功后读取输出
多个查询接口只在成功时赋值。每次调用使用独立输出对象;返回非 OK 时忽略其中内容。
激活状态
ActivationStatusCode |
产品含义 | 应用处理 |
|---|---|---|
OK |
激活有效 | 保存有效期并创建服务 |
Expired |
授权已过期 | 恢复授权;仅按已批准策略处理受限缓存连续性 |
Forbidden |
产品或设备被禁止 | 阻止启动并核对授权关系 |
Inactivated |
设备尚未激活 | 确认网络和配置后重新激活 |
AuthenticationFailure |
云端认证失败 | 检查凭据、系统时间、证书、端点和网络 |
InitFailure |
请求字段或本地环境不完整 | 修复必填字段、目录或证书 |
ActivationFailure |
激活流程失败 | 记录关联 ID 和脱敏上下文,按项目策略处理 |
InternalError / UnknownError |
激活内部或未分类异常 | 检查连接与服务健康,有限重试并升级处理 |
导航支持状态
getMapVersion(...) 成功表示服务已选中地图版本,不表示目标区域一定有数据;RunningMode::Normal 也不表示导航支持连接、车辆/路线上下文或交通数据正在更新。
| 信号 | 表示 | 应用处理 |
|---|---|---|
is_connected_to_navigation_sdk == false |
通信模块不可用 | 停止使用沿路线结果;交通按本次查询 Status 处理 |
is_navigation_sdk_notify_working == false |
导航系统的位置/状态消息未持续到达 | 将现有路线状态视为历史值,等待输入恢复 |
| 非导航、偏航或不在路 | 当前没有可直接消费的有效导航走廊 | 清除或降级路线叠加,等待新的有效状态 |
LinkOnRoute::link_match_status 仍在处理或未匹配 |
道路级路线尚未关联到高精 Lane Group | 不使用对应 Lane Group 范围 |
queryTraffic(...) 非 OK |
交通查询或关联未完成 | 按返回 Status 处理,不把空输出解释为畅通 |
queryTraffic(...) 为 OK 且数组为空 |
当前没有返回可关联的交通内容 | 表示无消息,不等同于明确 FreeFlow |
协作链路恢复后,从新的 NavigationStatus 重建路线状态,并使用新的交通查询结果更新交通状态。
有界重试
重试只用于幂等查询,并同时受以下条件约束:
- 单请求总截止时间和取消信号;
- 最大尝试次数、指数退避和抖动;
- 网络或服务故障期间的全局并发预算;
- 只处理
DataPending、部分Timeout或项目明确的可恢复错误; - 关闭开始后取消全部重试。
日志接口
日志接口包括 setLogLevel(LogLevel)、setLogHandler(LogHandler) 和 LogMessage。调试构建默认级别为 Warning,发布构建默认为 Disabled。
日志级别和处理回调是进程级共享配置,不属于单个 HDMapService 实例。应用设置唯一的日志生命周期所有者并串行调整配置;与 HDMapSDK 共享日志运行时的其他组件改变配置时,也会影响 HDMapSDK。
SDK 不指定日志回调所在线程。处理器需要线程安全、快速返回,不在回调路径执行磁盘压缩、网络上传或大块格式化。setLogHandler(...) 没有单独的注销接口,处理回调及其捕获上下文在 SDK 可能写日志期间保持有效。
敏感日志
初始化阶段的 Info 级诊断可能包含应用凭据、设备标识、端点和本地路径。量产使用项目批准的日志级别,并在导出前完成脱敏。
关闭期间的调用边界
- 停止提交新调用、重试和定时任务;
- 传入空
NavigationStatus回调并检查设置结果,停止通知后再释放回调上下文; - 调用
shutdown(),等待已经进入的 SDK 调用返回; shutdown()返回后不再调用服务,确认应用任务和回调不再引用实例后释放句柄。
重复调用 shutdown() 没有额外效果。
DataError 恢复
DataError 表示持久数据损坏,通常不能通过查询重试恢复:
- 停止新请求并调用
shutdown(); - 保存 SDK/地图版本、返回状态、磁盘健康和脱敏日志;
- 按项目交付说明隔离损坏的缓存数据,保留激活回执;
- 重新安装预置数据或允许受控下载;
- 重新激活并创建服务,读取地图版本后重新执行空间查询。
服务重建后重新获取所有运行时 ID,不把损坏前的 LaneGroupId、LaneId 或 LaneBoundaryId 用于新查询。