news 2026/7/26 20:44:49

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/7/22 9:59:23

MathLive 终极指南:2025年最简单上手的网页数学公式编辑器

MathLive 终极指南&#xff1a;2025年最简单上手的网页数学公式编辑器 【免费下载链接】mathlive A web component for easy math input 项目地址: https://gitcode.com/gh_mirrors/ma/mathlive 在当今数字化教育和技术文档蓬勃发展的时代&#xff0c;网页数学公式编辑已…

作者头像 李华
网站建设 2026/7/25 7:57:04

终极微信助手:6大智能功能让Mac微信更好用

终极微信助手&#xff1a;6大智能功能让Mac微信更好用 【免费下载链接】WeChatPlugin 微信小助手 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPlugin 你是否遇到过这些烦恼&#xff1a;重要消息被撤回后无从查证、重复问题需要手动回复、多个账号难以同时管理&…

作者头像 李华
网站建设 2026/7/25 6:08:41

盘搜联盟 一键直达海量资源,全网最强百度网盘搜索神器!

盘搜联盟&#xff1a;pan.brtl.cn 盘搜联盟&#xff08;pan.brtl.cn&#xff09;是一款专为百度网盘用户打造的免费资源搜索引擎。它能帮你快速、精准地查找全网共享的网盘学习资料、高清影视、软件工具等。界面简洁&#xff0c;操作简单&#xff0c;输入关键词即可直达资源链…

作者头像 李华
网站建设 2026/7/26 9:35:19

37、高效学习实践:成为学习大师

高效学习实践:成为学习大师 1. 捕获知识精华并转化为学习工具 在深入学习过程中,我们偶尔会遇到那些能让我们发生深刻改变的知识精华。这些精华值得被我们“捕获”到思维能力发展系统中,并且可以进一步“转化为学习工具”,也就是在高效学习数据库中为它们创建学习工具。 …

作者头像 李华
网站建设 2026/7/26 19:11:14

网页小说自由转换神器:一键打造你的专属离线图书馆

网页小说自由转换神器&#xff1a;一键打造你的专属离线图书馆 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在为网络…

作者头像 李华