如何等待在后台任务中完成异步方法

时间:2013-08-23 18:00:52

标签: java asynchronous download task wait

实现一个backgroung任务来获取远程服务器上的校验和并相应地更新实时磁贴,我遇到了一个时间问题。

以下是代码:

        MatchListImpl.IsThereNewResults();
        NewsListImpl.IsThereNewNews();

        RaiseToast();
        UpdateTile();

这很简单。 前两个调用是指 async 函数,它将使用WebConnector下载两个文件“* .cksum”。最后两个调用将更新磁贴并根据下载文件的内容发出通知。

问题是后来的功能通常在下载两个文件之前执行, async 方法没有完成。当然,事情的整个逻辑是无效的。

我的问题是:有没有办法“暂停”执行任务以真正等待 async 方法结束?

由于这是绝对不优雅的,第二个问题:难道没有更好的方法吗?

感谢您的回答:)

1 个答案:

答案 0 :(得分:2)

您可以将当前类传递给异步任务,然后在异步类的onPostExecute方法中调用RaiseToast()和UpdateTile(),例如:假设在RaiseToast()中使用的是一些在MatchListImpl async中下载的文件任务,你可以将RaiseToast()的当前类传递给async任务类,在它的构造函数中。

class MatchListImpl extends AsyncTask{
    ClassContainingRaiseToast myClass;
    //contructor:
    MatchListImpl(ClassContainingRaiseToast myClass){
    this.myClass = myClass;
    }
    ... 
    @Override
    //this method will be executed after finishing AsyncTask job
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
          // RaiseToast() must be declared public in myClass
             myClass.RaiseToast();
    }

}

所以不要在myClass中调用RaiseToast()。并在asyncTast类中调用它istead!