news 2026/4/23 12:39:48

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/23 14:32:57

mixomi 海豹油:来自加拿大纽芬兰的高品质 Omega-3 补充品

随着消费者健康意识的提升&#xff0c;Omega-3 脂肪酸补充品在日常饮食中占据了重要地位。mixomi 海豹油凭借其优质的原料、先进的生产工艺以及精准的质量控制&#xff0c;确保每一颗胶囊都能为消费者提供最高质量的 Omega-3 脂肪酸。通过结合天然纯净的来源与科学精湛的提纯技…

作者头像 李华
网站建设 2026/4/23 17:07:06

MuJoCo无头渲染终极指南:云端物理仿真的高效方案

MuJoCo无头渲染终极指南&#xff1a;云端物理仿真的高效方案 【免费下载链接】mujoco Multi-Joint dynamics with Contact. A general purpose physics simulator. 项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco 在当今AI与机器人技术快速发展的时代&#x…

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

Univer表格数据规范与可视化:从零到精通的5个高效技巧

Univer表格数据规范与可视化&#xff1a;从零到精通的5个高效技巧 【免费下载链接】univer Univer is a set of enterprise document and data collaboration solutions, including spreadsheets, documents, and slides. The highly extensible design allows developers to c…

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

react navite相比较传统开发有啥优势?

一、先给你「一句话结论」Web 技术栈强 → RN / Expo 追求极致性能 & 统一 UI → Flutter 快速上线 / 小团队 → Expo 复杂业务型 App → React Native 长期稳定 / 大厂级 → Flutter 或 RN&#xff08;非 Expo Go&#xff09;二、三者到底是什么关系&#xff08;很多人搞混…

作者头像 李华
网站建设 2026/4/22 17:28:14

5、提升知识应用效能:从理论到实践

提升知识应用效能:从理论到实践 1. 精益创业理念 在创业领域,很多人认为初创项目的成功依赖于天才般的创意、坚持不懈的努力和恰到好处的时机,但 Eric Ries 在其理念中指出,这种观点其实是一种误区。有些创业项目失败,是因为领导者过度信赖完美的商业计划、市场调研和预…

作者头像 李华