我的应用程序本质上是一个后台服务,需要偶尔注册一个NSD
服务(Bonjour
服务),以便能够发现由主后台服务(也就是应用程序运行)运行的套接字服务器。
如果我正确阅读了Android Bonjour Service 文档,这就是您启动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
在主服务崩溃后不会留下一堆僵尸服务?