Skip to content

跨进程协同

功能介绍

NavigationServiceEHService 不在同一进程(甚至不在同一 App)时,可通过“导航内容同步地址”实现跨进程协同。
Android 侧对应入口是:

  • 导航侧:NavigationServiceOptions.Builder.setNavigationSyncAddress(address)
  • EH 侧:EHServiceOption.Builder.setNavigationSyncAddress(address)

两侧使用同一个地址字符串(tcp://<IPv4>:<port>),即可建立导航内容同步通道。

适用场景

  • 导航主进程与 ADAS/EH 进程拆分部署
  • 两个独立应用分别承载导航与 EH 能力
  • 需要在不共享 NavigationService 实例的情况下复用导航上下文

接入前提

  • 两侧都已完成 SDK.getInstance().initialize(...)
  • 两侧地图数据与区域配置可正常工作
  • 两侧约定统一的同步地址(建议先用 127.0.0.1 回环地址)

接入步骤

1) 约定同步地址

1
tcp://127.0.0.1:1234

2) 导航进程配置

1
2
3
4
5
val navigationService = NavigationService.Factory.createInstance(
    NavigationServiceOptions.Builder()
        .setNavigationSyncAddress("tcp://127.0.0.1:1234")
        .build()
)

3) EH 进程配置

1
2
3
4
5
6
val ehDataService = EHService.Factory.createEHDataService(
    EHServiceOption.Builder()
        .setServiceMode(EHServiceMode.AFFILIATE)
        .setNavigationSyncAddress("tcp://127.0.0.1:1234")
        .build()
)

或消息形态:

1
2
3
4
5
6
val ehMessageService = EHService.Factory.createEHMessageService(
    EHServiceOption.Builder()
        .setServiceMode(EHServiceMode.AFFILIATE)
        .setNavigationSyncAddress("tcp://127.0.0.1:1234")
        .build()
)

4) 正常启动各自能力

  • 导航侧按常规 startNavigation(...)
  • EH 侧按常规注册 EHDataListenerEHMessageListener

与同进程联动的区别

场景 推荐方式
同进程(同 App 内) EHServiceMode.AFFILIATE + navigationService.addExtension(ehService)
跨进程(双进程/双 App) 两侧都设置 setNavigationSyncAddress(...),地址一致

跨进程场景通常不依赖直接共享 NavigationService 实例。

常见问题与排查

地址不一致

  • 症状:EH 输出无法体现导航上下文联动
  • 排查:确认导航侧与 EH 侧地址字符串完全一致(含端口)

地址为空或非法

  • EH 侧如果地址为空会导致内部绑定失败,服务创建可能抛出 EHServiceException
  • 建议统一封装地址配置并做参数校验

生命周期不一致

  • EH 侧 dispose() 会解除内部 broker 绑定
  • 如果 EH 进程提前销毁,跨进程同步会中断

端口冲突

  • 同一设备上多个实例占用同端口会导致绑定/启动失败
  • 建议固定一个业务端口并集中管理

注意事项

  • 该机制用于“导航内容同步”,不替代定位输入链路;定位注入仍使用 injectLocationProvider(...)
  • 生产环境建议将地址配置下沉到统一配置中心,避免版本分叉造成地址漂移。