Извините, если это глупый вопрос. Я очень плохо знаком с Android.
Я написал библиотеку, которая использует библиотеку, которая использует службу связывания. То есть в моей библиотеке есть класс, производный от библиотечного класса, который использует связыватель.
Моя библиотека предназначена для предоставления этих данных через API независимым от платформы способом (она не может раскрыть зависимость от подшивки). Для этого обсуждения, скажем, есть функции «Старт» и «Стоп». Запуск ускоряет обслуживание, если ref-count равен нулю, и увеличивает счетчик ref. Стоп уменьшает счетчик ссылок, а когда счетчик ссылок становится равным нулю, я хочу закрыть все, запустить код очистки и т. Д.
Вся документация, которую я могу найти, говорит, что я должен вызывать startThreadPool и joinThreadPool, чтобы получать события связывания. Но joinThreadPool блокирует, поэтому функция Start никогда не возвращается.
Это означает, что подписка на связующее должна происходить в потоке. Но даже если я помещу вызов joinThreadPool в его собственный поток, я не знаю, как заставить joinThreadPool завершить работу так, чтобы он мог очиститься.
Поэтому я попытался создать поток, который просто вызывает startThreadPool и вращается в цикле сна, когда атомарность установлена; Стоп очищает атом. Теоретически это работает, но моя отладка, кажется, показывает, что если я пытаюсь завершить процесс, использующий мой API, я получаю событие «binder exited» до того, как мой код очистки может быть выполнен.
Основной вопрос заключается в следующем: как использовать связующее вещество неблокирующим образом, а затем оставить его и очистить?
Задача ещё не решена.
Других решений пока нет …