我維護一個啓動守護程序線程以在後臺執行工作的庫。在常規的Java和Android應用程序中,此線程將啓動一次並在該進程的整個生命週期中運行。它永遠不會退出,沒關係。在應用程序卸載時退出線程
當我的庫包含在支持應用程序卸載的應用程序容器(如Tomcat)中時,應用程序永遠不會卸載。我正在運行的線程擁有對其自己的類的強引用,並阻止整個應用程序被卸載。我的圖書館的用戶無法每次都在不泄漏內存的情況下熱切換他們的應用程序。
當應用程序容器希望卸載我的庫時,獲取信號的最佳方式是什麼?
這是一個不依賴應用程序容器API的小型庫。它不知道它正在運行哪個應用程序容器,而且它不想!
這個庫啓動一個線程的事實是一個實現細節。圖書館的最終用戶不應該知道一個線程正在啓動,關閉它並不是他們的責任。
有沒有其他的對象可以檢測垃圾回收? – immibis 2015-02-10 06:26:56
我不確定我是否正確理解您的問題,但可能是這樣的:https://weblogs.java.net/blog/kcpeppe/archive/2011/09/29/mysterious-phantom-reference會有幫助嗎? – 2015-02-10 08:47:05