java - 我可以依靠垃圾收集器来停止 AsyncTask 吗?

标签 java android garbage-collection

一个快速的理论问题。假设我有一个 Java 类,它使用了终结器和它自己的私有(private) AsyncTask 的实例,该实例未在其他任何地方引用。

现在假设 AsyncTask 的 doInBackground 方法是这样的:

while(go) {
 f();
}

终结器是:

public void finalize() {
 go = false;
}

当对象的所有外部引用都被删除后,AsyncTask会停止吗?或者系统会继续线程,永远不会删除对象,因为它被线程引用了?

最佳答案

Can I rely on the garbage collector to stop an AsyncTask?

不,你不能。事实上,您可以相信 GC 不会停止任务。

GC 只会终结一个已经变得不可访问的对象。但是根据定义,所有 Activity 线程都是可达的,这意味着 AsyncTask 对象也将是可达的。

关于java - 我可以依靠垃圾收集器来停止 AsyncTask 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018528/

相关文章:

php - 有没有办法在 PHP 中跟踪垃圾收集器事件?

iOS 上的 JavaScriptCore : VM Garbage Collector not automatically emtpying

java - split vector

java - 为什么 OpenCV 的 MSER 的 Python 实现和 Java 实现会产生不同的输出?

javascript - Android 上的本地 Ajax 请求/Sencha/PhoneGap

java - Android - 从通知中获取值

javascript - 如果对象是通过引用复制的,为什么 JavaScript 垃圾回收会这样工作?

java - 如何为 Java JTree 设计外观,使其看起来像用于 xml 文档?

java - 并非所有命名参数都已在 createSQLQuery 中设置为 hibernate

Chrome 72 更新后 Android Cordova 应用渲染缓慢