Я поддерживаю библиотеку, которая запускает поток демона для работы в фоновом режиме. В обычных приложениях Java и Android этот поток запускается один раз и выполняется на протяжении всего процесса. Он никогда не выходит и все в порядке.
Когда моя библиотека включена в контейнер приложения, который поддерживает разгрузку приложения (например, Tomcat), приложение никогда не выгружается. Мой бегущий поток содержит сильные ссылки на собственный класс и предотвращает разгрузку всего приложения. Пользователи моей библиотеки не могут "горячей" заменой своего приложения, не теряя памяти каждый раз.
Какой лучший способ получить сигнал, когда контейнер приложения хочет выгрузить мою библиотеку?
Это небольшая библиотека, не зависящая от API-интерфейсов контейнера приложений. Он не знает, в какой контейнер приложения он работает, и он не хочет!
Тот факт, что эта библиотека запускает поток, является деталью реализации. Конечным пользователям библиотеки не нужно знать, что поток запускается, и это не их ответственность, чтобы закрыть его.