2010-11-05 44 views
0

我在我的活動中創建了一個線程,該線程在運行約10秒後將在我的活動中打印出我的實例變量的值。在線程輸出值之前,我按下後退鍵銷燬我的活動,當線程到達該行代碼時,它仍然可以正確輸出值。這意味着即使活動已完成,活動的Java對象仍然存在。物體會一直在那裏嗎?或者它只是在等待被GCed?或者它只會在Android需要內存時纔會被殺死?調用finish()後活動對象何時真的被殺死?

回答

2

請參閱this question:即使活動被破壞,您的線程也不會被垃圾收集。您需要專門請求您的線程來終止onFinish()函數。然後或者讓它自己殺死或者做一個join()以等待它實際終止。

+0

因此,由於線程無法被GCed,並且活動仍然保留對線程的引用,因此直到線程完成後,活動纔會被GCed。 – user412759 2010-11-06 02:57:11

+0

您可以在您的activty#onDestroy方法中將線程引用設置爲null。這種方式活動不再保留對線程的引用。然而,線程將在活動獲得GCed後繼續運行。 – 2010-11-11 16:40:10