Android AsyncTask启动另一个AsyncTask

5

我目前正在AsyncTask的onPostExecute方法中执行类似以下的操作,其中NewTask不是正在执行的当前任务:

private class OlderTask extends AsyncTask<String, Void, Integer> {
    //other functions (not important)

    @Override
    protected void onPostExecute(Integer result) {
        new NewTask().execute(null, null);
    }
}

我在想这是否是个坏主意。这样做会导致旧任务的垃圾回收等待新任务吗?使用这种方法还可能存在其他问题吗?
如果这是个问题,我该如何解决?
2个回答

3

除非NewTaskOlderTask中的内部非静态类,否则它不会阻止GC收集OlderTask,除非您以其他方式存储了对它的引用。

但即使GC会等待NewTask完成,除非您在OlderTask中保存大量数据或创建大量副本,否则这不应该成为问题。

因此,如果您的设计需要这样做,那么可以。但最好不要有链接任务。


谢谢。如果“OlderTask”正在创建新的“OlderTask”,同样的逻辑也适用吗? - yydl
只要它是OlderTask的不同实例,并且不直接或间接地引用先前的实例,就可以这样做。 - Alex Gitelman

0

我使用回调方法,所以当结果在onPostExecute中返回时,我从UI调用另一个AsynkTask,我认为这是个好主意,你觉得呢?

public class PatientSearchController extends AsyncTask < String, Void, String > {

    private PatientSearchResultHandler handler = null;

    public void onResultHandler(PatientSearchResultHandler handler) {
        this.handler = handler;
    }

    @Override
    protected String doInBackground(String...params) {

    }

    @Override
    protected void onPostExecute(String result) {
        this.handler.onResultSuccessHandler(result);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接