gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:15:52 25 4
gpt4 key购买 nike

在实现后台任务以获取远程服务器上的校验和并相应地更新 Activity 磁贴时,我遇到了计时问题。

代码如下:

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

RaiseToast();
UpdateTile();

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

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

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

因为这绝对不优雅,所以第二个问题:没有更好的方法吗?

感谢您的回答:)

最佳答案

您可以将当前类传递给异步任务,然后在异步类的 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 类中调用它!

关于java - 如何在后台任务中等待异步方法完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18409043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com