【发布时间】:2016-12-07 22:51:04
【问题描述】:
我的应用本质上是一个后台服务,它需要偶尔注册一个NSD 服务(Bonjour 服务),以便能够发现由主后台服务(也就是由应用运行)运行的套接字服务器。
如果我正确阅读了Android Bonjour Service doc,这就是您启动Bonjour 服务的方式(为简洁起见):
mNsdManager = Context.getSystemService(Context.NSD_SERVICE);
mDiscoveryListener = new NsdManager.DiscoveryListener()
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
...这就是你阻止它的方法:
mNsdManager.unregisterService(mRegistrationListener);
这是我无法理解的部分:如果主服务突然停止,任何在崩溃时注册的 Bonjour 服务都会继续运行,即使它不再有目的(套接字它帮助发现的服务器不再存在)。
当主服务重新启动时,我无法清理僵尸Bonjour 服务,因为该服务最初注册的mRegistrationListener 也不再存在。
我怀疑我采取了错误的方法:我如何确保在主服务崩溃后不会留下一堆僵尸Bonjour 服务?
【问题讨论】:
标签: android android-service android-networking android-nsd