news 2026/4/18 8:46:59

android NDSDManager onResolveFailed errorCode=3的解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
android NDSDManager onResolveFailed errorCode=3的解决方案

stack overflow有介绍,这个原因可能是系统同时发现了多个

discoveryListener=object:NsdManager.DiscoveryListener{overridefunonServiceFound(service:NsdServiceInfo){onServiceFoundInfo(service)//解析info}....}funonServiceFoundInfo(){//开始解析nsdManager.resolveService(next,object:NsdManager.ResolveListener{overridefunonResolveFailed(serviceInfo:NsdServiceInfo,errorCode:Int){loge(TAG){"Failed to resolve service:${serviceInfo.serviceName}, error:$errorCode"}}overridefunonServiceResolved(serviceInfo:NsdServiceInfo){//解析成功})}

如果你这里直接开始解析,在某些手机上,可能就报错了。告诉你,解析出错,errorCode=3。
因为可能同时有多个onServiceFound过来,同时,resolveService就会出错。

解决办法:串行执行。

这里采用kotlin的suspendCancellableCoroutine + LinkedBlockingQueue解决。

privatevalmResolveQueue=LinkedBlockingQueue<NsdServiceInfo>()privatevalmIsResolving=AtomicBoolean(false)discoveryListener=object:NsdManager.DiscoveryListener{overridefunonServiceFound(service:NsdServiceInfo){onServiceFoundInfo(service)}....}privatefunonServiceFoundInfo(service:NsdServiceInfo){mResolveQueue.offer(service)//内部有锁的processResolveQueue()}privatefunprocessResolveQueue(){if(!mIsResolving.compareAndSet(false,true))returnscope.launch{//子线程while(true){valnext=mResolveQueue.poll()?:breakvalresolved=suspendCancellableCoroutine{cont->try{nsdManager.resolveService(next,object:NsdManager.ResolveListener{overridefunonResolveFailed(serviceInfo:NsdServiceInfo,errorCode:Int){loge(TAG){"Failed to resolve service:${serviceInfo.serviceName}, error:$errorCode"}if(cont.isActive)cont.resume(null)}overridefunonServiceResolved(serviceInfo:NsdServiceInfo){if(cont.isActive)cont.resume(serviceInfo)}})}catch(e:Exception){loge(TAG,e){"Failed to resolve service:${next.serviceName}, error:${e.message}"}if(cont.isActive)(//if(!e.message.isNullOrEmpty()) cont.resumeWithException(e) else cont.resume(null)cont.resume(null)//不做异常抛出)}}if(resolved!=null){handleResolvedService(resolved)//todo 自己的逻辑}}mIsResolving.set(false)if(mResolveQueue.isNotEmpty()){processResolveQueue()}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:41:06

Kotaemon文档切片策略优化:提升检索相关性的小技巧

Kotaemon文档切片策略优化&#xff1a;提升检索相关性的小技巧 在构建智能问答系统时&#xff0c;我们常常会遇到这样一个尴尬场景&#xff1a;用户问了一个非常具体的问题&#xff0c;比如“合同第4.3条规定的违约赔偿标准是多少&#xff1f;”&#xff0c;系统却返回了一段泛…

作者头像 李华
网站建设 2026/4/11 23:11:49

从零到精通的《动手学深度学习》全教程,附资料获取,建议收藏!

本文详细介绍沐神的《动手学深度学习》教程&#xff0c;涵盖11个章节从基础到进阶内容&#xff0c;包括各类神经网络、优化算法、CV和NLP等核心知识&#xff0c;理论与实践结合。 如果你正在学习深度学习&#xff0c;肯定听说过李宏毅老师的深度学习教程&#xff0c;以及沐神的…

作者头像 李华
网站建设 2026/4/15 9:00:02

Transformer架构详解:机器学习最重要的进展,改变NLP与CV领域

Transformer是过去十年机器学习最重要的进展&#xff0c;通过自注意力机制解决了RNN的长程依赖和并行化问题。它由编码器和解码器组成&#xff0c;使用词嵌入和位置编码处理输入&#xff0c;通过自注意力机制和多头注意力机制捕捉单词间关系。现代Transformer包括BERT&#xff…

作者头像 李华
网站建设 2026/4/16 14:36:23

CompressAI深度学习图像压缩:从入门到精通的完整实战手册

CompressAI深度学习图像压缩&#xff1a;从入门到精通的完整实战手册 【免费下载链接】CompressAI A PyTorch library and evaluation platform for end-to-end compression research 项目地址: https://gitcode.com/gh_mirrors/co/CompressAI 想要在深度学习图像压缩领…

作者头像 李华
网站建设 2026/4/18 10:51:58

ComfyUI开源生态揭秘:如何快速构建自定义AI绘图工具

ComfyUI开源生态揭秘&#xff1a;如何快速构建自定义AI绘图工具 【免费下载链接】ComfyUI 最强大且模块化的具有图形/节点界面的稳定扩散GUI。 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI ComfyUI开源生态作为AI绘图工具领域的重要力量&#xff0c;其独…

作者头像 李华
网站建设 2026/4/18 12:27:02

AI动画生成终极指南:5分钟让涂鸦作品动起来

AI动画生成终极指南&#xff1a;5分钟让涂鸦作品动起来 【免费下载链接】AnimatedDrawings Code to accompany "A Method for Animating Childrens Drawings of the Human Figure" 项目地址: https://gitcode.com/GitHub_Trending/an/AnimatedDrawings 想让孩…

作者头像 李华