Мое приложение - это, по существу, справочная служба, которая должна периодически регистрировать услугу NSD
(Bonjour
) с целью включения обнаружения сервера сокетов, выполняемого основным фоновое обслуживание (также выполняемое приложением).Android: остановка сервиса 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
, которая была зарегистрирована во время сбоя, продолжает работать, даже если у нее больше нет цели (сервер сокетов помогает дискотеке ver больше не существует).
Невозможно провести мероприятия по очистке зомби Bonjour
услуг, когда основная услуга перезапускается, потому что mRegistrationListener
услуга изначально была зарегистрирована, также больше нет.
Я подозреваю, что принимаю неправильный подход: как я могу убедиться, что я не оставляю беспорядок службы зомби Bonjour
после того, как основной сервис разбился?
Спасибо, что поймать неперехваченные исключения с помощью 'UncaughtExceptionHandler' - это, вероятно, путь - хотя я надеялся на способ запустить сервис Bonjour в основном процессе (я нахожу, что это удивительно, что реализация Android не позволяет этого варианта) , Я приму ваш ответ, если в ближайшие пару дней ничего не получится. – Hugo
Согласен, вы бы подумали, что есть правильный способ справиться с этим. Я не мог найти документацию для поддержки теории, но она может быть обработана ОС. Возможно, Google думает, что люди могут не думать об этом вообще, поэтому они должны автоматически справиться с этим! –
Спасибо @thril, используя 'UncaughtExceptionHandler', чтобы отменить регистрацию службы, которая работала для меня (я успешно протестировал, сбой службы через несколько секунд после регистрации службы, используя таймер демона, работающий в отдельном потоке) – Hugo