非同期タスクを実行するメソッドを呼び出すクラスのローカルインスタンスがある場合、非同期タスクが完了する前に実行されないガベージコレクションに依存できますか?これが私が言及しているものの例です。私が以下を持っている場合:
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