{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508994150,"data":{"id":71713905,"title":"17.3 服务初始化&反初始化","slug":"sbase7","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
前序文档:交互时序
本节描述通道服务(ChannelService)和视图服务(MultiDisplayService)的初始化和反初始化,初始化是使用一致性等能力前的必要步骤,反初始化则是断开多屏连接、销毁通道和销毁视图的必要步骤,他们之间也存在着时序关系。
参数名 | 说明 |
isMaster | 是否为主控视图,true为是 |
useInnerChannel | 是否使用内置通道,为false需要外部自建通道,按照通道代理的方式实现 |
enableConsis | 是否开启一致性 |
host | 内置通道通信的ip,一般为局域网ip |
port | 内置通道所用端口 |
localSdkName | 本机设备名称,该字段为sdk间的标识,不可设置成相同,主屏该字段不需要设置,Sdk内部固化为"MainSdk" |
int com.autonavi.gbl.consis.ChannelService.init(ChannelInitParam initParam)
如果指定使用内部通道,外部可配置内部通道的端口,默认端口为1234。如果为主控一致性,会打开监听端口,等待其他屏幕连接,建立通信通道;如果为非主控屏,会发起Tcp连接请求,建立和主控屏的通信信道。localSdkName字段可以设置设备名称,副屏必须设置设备名称且副屏间不允许设置相同的设备名称,否则会出现设置相同名字的副屏连接主屏异常,主屏该字段不需要设置,Sdk内部固化为"MainSdk" 。
int com.autonavi.gbl.consis.ChannelService.uninit()
反初始化会做通道的断开和销毁,因为视图依赖通道同步消息,所以视图服务的退出必须在通道的反初始化之前,如果通道服务先于视图服务退出会出现异常。
int com.autonavi.gbl.multi.display.MultiDisplayService.addObserver(IRemoteDisplayObserver)
该接口必须在通道初始化之前,如果在通道初始化后进行添加观察者可能会错过一些关键信息。
/*< 获取多屏通道服务实例 */\nChannelService mChannelService = (ChannelService)ServiceMgr.getServiceMgrInstance().getBLService(SingleServiceID.ChannelServiceID);\nif (mChannelService == null) {\n return false;\n}\n\nChannelInitParam initParam = new ChannelInitParam();\ninitParam.enableConsis = true; //这里配置是否需要开启一致性\ninitParam.host = "127.0.0.1";\ninitParam.port = 1234;\n/*< 从配置文件等获取当前进程的主副屏属性 */\ninitParam.isMaster = getConfig("isMasterDisplay");\ninitParam.useInnerChannel = true;\n/*< 副屏该字段必须设置且不允许重复,主屏该字段不需要设置 */\ninitParam.localSdkName = "client-A"\n/*< 多屏通道服务初始化 */\nmChannelService.init(initParam);