1

实施背景任务以获取远程服务器上的校验和并相应地更新活动磁贴,我遇到了时间问题。

这是代码:

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

        RaiseToast();
        UpdateTile();

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

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

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

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

谢谢你的回答:)

4

1 回答 1

2

您可以将当前类传递给异步任务,然后在异步类的 onPostExecute 方法中调用 RaiseToast() 和 UpdateTile() 例如:假设在 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 类中调用它!

于 2014-05-26T19:54:51.743 回答