首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道异步任务何时返回

问如何知道异步任务何时返回
EN

Stack Overflow用户
提问于 2013-12-05 21:29:58
回答 6查看 63关注 0票数 0

我有一个异步任务,从server.After加载图像urls加载urls,而不是通过另一个异步任务逐个加载图像。在单击一个按钮时,我启动了第一个异步任务

代码语言:javascript
复制
    public void getit(View v)
    {

        new getdata().execute("http://10.0.2.2/geturls.php");
// line no 2
    }

在获得urls之后,我使用另一个异步任务来加载图像。如果我使用了一个boolean变量,我在onpostexecute中切换了这个变量,那么我如何才能知道图像url什么时候已经被加载,并且我可以在第2行调用第二个异步任务呢?

代码语言:javascript
复制
 @Override
            protected void onPostExecute() {
urlgot=true;
}

然后,我必须在getit方法中的第2行使用一些重复的循环来检查这个变量urlgot的状态。但它可能会花费比UI线程所允许的更多的时间。有没有更干净的方法来做这项检查。谢谢

EN

回答 6

Stack Overflow用户

发布于 2013-12-05 21:34:52

我能想到两种解决方案:

1)创建一个执行所有操作(获取urls和下载所有图像)的AsyncTask。你就不会知道什么时候开始下载图片了。

2)从第一个AsyncTask的onPostExecute()开始下一个AsyncTask。

票数 2
EN

Stack Overflow用户

发布于 2013-12-05 21:34:30

在不破坏AsyncTask的目的的情况下,您将无法在//line no 2中完成下一项工作。如果您正在进行网络活动,则需要异步进行,因此这不是一种选择。

相反,在onPostExecute()中,您可以在您的活动中调用另一个方法,该方法执行您在//line no 2中应该执行的操作。这样做是安全的,因为onPostExecute()发生在UI线程上。

但根据您的设计,在onPostExecute中使用原始AysncTask执行所有//line no 2内容可能更有意义,因此您只有一个任务来完成所有工作。

票数 0
EN

Stack Overflow用户

发布于 2013-12-05 21:34:47

我在执行后使用一个自定义接口来做一些事情。

代码语言:javascript
复制
public Interface OnDataReceived
{
    public void onReceive( Object result);
}

在MyASyncTask上

代码语言:javascript
复制
public class MyAsyncTask extends ASyncTask<Object,Object,Object>
{
    OnDataReceived receiver;
    public MyAsyncTask( OnDataReceived receiver )
    {
        this.receiver  = receiver;
    }
...
    protected void onPostExecute( Object result)
    {
        receiver.onreceive( result );
    }
}

并让我的主类实现OnDataReceived

代码语言:javascript
复制
public class Main implements OnDataReceived 
{
....
    public void getit(View v)
    {
        new MyAsyncTask(this).execute("http://10.0.2.2/geturls.php");
    }
    @override
    public void onReceive( Object result)
    {
        // do whatever
    }
}

编辑

为了获得更多的控制,您可以添加onFailed并将您的接口重命名为OnResponse

代码语言:javascript
复制
public Interface OnResponse
{
    public void onReceive( Object result);
    public void onFailed( Object errcode);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20401324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档