实现一个backgroung任务来获取远程服务器上的校验和并相应地更新实时磁贴,我遇到了一个时间问题。
以下是代码:
MatchListImpl.IsThereNewResults();
NewsListImpl.IsThereNewNews();
RaiseToast();
UpdateTile();
这很简单。 前两个调用是指 async 函数,它将使用WebConnector下载两个文件“* .cksum”。最后两个调用将更新磁贴并根据下载文件的内容发出通知。
问题是后来的功能通常在下载两个文件之前执行, async 方法没有完成。当然,事情的整个逻辑是无效的。
我的问题是:有没有办法“暂停”执行任务以真正等待 async 方法结束?
由于这是绝对不优雅的,第二个问题:难道没有更好的方法吗?
感谢您的回答:)
答案 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!