gpt4 book ai didi

java - 调用执行异步任务的方法的本地实例的垃圾收集

转载 作者:行者123 更新时间:2023-11-29 03:35:52 25 4
gpt4 key购买 nike

如果我有一个调用执行异步任务的方法的类的本地实例,我可以依赖于在异步任务完成之前从未执行过的垃圾收集吗?这是我所指的一个例子;如果我有以下内容:

private void loadDocument(String url) {
HtmlReader reader = new HtmlReader();
reader.addHtmlListener(this);
reader.loadUrl(url);
}

HtmlReader 的代码如下所示:

public class HtmlReader {

ArrayList<HtmlListener> _htmlListeners = new ArrayList<HtmlListener>();

public void addHtmlListener(HtmlListener listener) {
this._htmlListeners.add(listener);
}

public void removeHtmlListener(HtmlListener listener) {
this._htmlListeners.remove(listener);
}

public void processHtmlResponse(String url, String html) {
for (HtmlListener listener: this._htmlListeners) {
listener.loadUrlSuccessCallback(url, html);
}
}

public void loadUrl(String url) {
new GetHtmlTask().execute(url);
}

class GetHtmlTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
....
}

protected void onPostExecute(String html) {
processHtmlResponse(html);
}
}

public interface HtmlListener {
void loadUrlSuccessCallback(String url, String html);
}
}

在这种情况下,loadDocument 方法肯定会在异步任务完成之前完成。我能否确定 reader 实例在 GetHtmlTask​​ 完成之前不会被垃圾回收?

最佳答案

当有对它的引用时,GetHtmlTask​​ 将不会被垃圾回收。只要线程处于 Activity 状态,调度程序就会维护这样的引用。因为它又是 HtmlReader 类的内部类,所以它维护对其封闭实例的引用。因此,只要任务在运行,实例就不会被垃圾回收。

关于java - 调用执行异步任务的方法的本地实例的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com