Android AsyncTask 启动另一个 AsyncTask

发布于 2024-11-16 06:39:06 字数 427 浏览 2 评论 0原文

我目前正在 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);
    }
}

我想知道这是否是一个坏主意。这样做会导致 OlderTask 的 GC 等待 NewTask 吗?使用这种方法还有其他可能的问题吗?

如果这是一个问题,我该如何纠正?

I'm currently doing something like this in the AsyncTask's onPostExecute method, where NewTask is not the current task that's executing:

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

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

I'm wondering if this is a bad idea. Will doing so cause GC for the OlderTask to wait for the NewTask? Are there any other possible problems with using such an approach?

And if this is a problem, how can I rectify it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

听风吹 2024-11-23 06:39:06

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

但即使 GC 会等到 NewTask 完成,也不会有什么大问题,除非您在 OlderTask 中保存大量数据或创建 OlderTask 的大量副本。 /代码>。

因此,如果您的设计需要这样做,那就没问题。但没有连锁任务肯定更干净。

Unless NewTask is inner non static class in OlderTask it will not prevent GC from collecting OlderTask unless you store reference to it in some other way.

But even if GC will wait until NewTask is done it should not be a big deal unless you save lot of data in OlderTask or create lots of copies of OlderTask.

So if your design requires doing that, it's ok. But it surely cleaner not to have chained tasks.

原来是傀儡 2024-11-23 06:39:06

我使用回调方法,所以当结果到达 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);
    }
}

I use a callback method, So when result comes to onPostExecute I call another AsynkTask from UI, I think it is good idea, Let me know what do you think.

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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文