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