2013-08-23 129 views
0

实现后台任务以获取远程服务器上的校验和并相应地更新活动磁贴,我遇到了一个计时问题。如何等待异步方法在后台完成

下面的代码:

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

     RaiseToast(); 
     UpdateTile(); 

这是相当简单的。 前两个调用指的是异步函数,该函数将使用WebConnector下载两个文件“* .cksum”。最后两次调用将根据下载文件的内容更新平铺并引发通知。

问题是后面的函数经常在两个文件下载之前执行,异步方法没有完成。当然,这件事的整个逻辑是无效的。

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

由于这是绝对不雅观的,第二个问题:是否没有更好的方法来做到这一点?

感谢你的答案:)

回答

1

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

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类中调用它!