如果我有一个调用执行异步任务的方法的类的本地实例,我是否可以依赖在异步任务完成之前永远不会执行垃圾收集。这是我所指的一个例子;如果我有以下情况:
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