2010-11-05 43 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