Gestisco una libreria che avvia un thread daemon per eseguire il lavoro in background. Nelle normali applicazioni Java e Android, questo thread viene avviato una volta e viene eseguito per tutta la durata del processo. Non esce mai e va bene.Esci da un thread dopo lo scaricamento delle app
Quando la mia libreria è inclusa in un contenitore un'applicazione che supporta lo scarico applicazione (come Tomcat), l'applicazione non sborra. Il mio thread in esecuzione contiene forti riferimenti alla propria classe e impedisce che l'intera applicazione venga scaricata. Gli utenti della mia libreria non possono scambiare la propria app a caldo senza perdite di memoria ogni volta.
Qual è il modo migliore per ottenere segnalata quando il contenitore applicazione vuole scaricare la mia biblioteca?
Si tratta di una piccola libreria senza alcuna dipendenza da API contenitore di applicazioni. Non sa quale contenitore di applicazioni è in esecuzione e non vuole farlo!
Il fatto che questa libreria inizi una discussione è un dettaglio di implementazione. Gli utenti finali della libreria non devono sapere che è in corso l'avvio di un thread e che non è responsabilità chiuderlo.
C'è qualche altro oggetto che è possibile rilevare il garbage collection di? – immibis
Non sono sicuro di aver compreso correttamente il problema, ma forse questo: https://weblogs.java.net/blog/kcpeppe/archive/2011/09/29/mysterious-phantom-reference sarà utile? –