Android 调用finish()后,活动对象何时真正被终止?

Android 调用finish()后,活动对象何时真正被终止?,android,Android,我在我的活动中创建了一个线程,该线程将在运行大约10秒后在我的活动中打印出我的实例变量的值。在线程打印出值之前,我按了back键来销毁我的活动,当线程到达那行代码时,它仍然可以正确地打印出值。这意味着即使活动已经完成,活动的java对象仍然存在。物体会一直存在吗?或者它只是在等待GCD?或者,只有当Android需要内存时,它才会被杀死?请参阅:即使活动被破坏,您的线程也不会被垃圾收集。您需要特别请求线程在onFinish()函数中终止。然后,要么让它自杀,要么执行join()以等待它实际终止。

我在我的活动中创建了一个线程,该线程将在运行大约10秒后在我的活动中打印出我的实例变量的值。在线程打印出值之前,我按了back键来销毁我的活动,当线程到达那行代码时,它仍然可以正确地打印出值。这意味着即使活动已经完成,活动的java对象仍然存在。物体会一直存在吗?或者它只是在等待GCD?或者,只有当Android需要内存时,它才会被杀死?

请参阅:即使活动被破坏,您的线程也不会被垃圾收集。您需要特别请求线程在onFinish()函数中终止。然后,要么让它自杀,要么执行join()以等待它实际终止。

因此,由于线程无法进行GCed,而活动仍保留对线程的引用,因此在线程完成之前,活动不会进行GCed?您可以在activity#ondestory方法中将线程引用设置为null。这样,活动就不再持有对线程的引用。但是,该线程将在活动获得GCed后继续运行。