有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在后台等待异步方法完成

在远程服务器上执行后台任务以获取校验和并相应地更新活动磁贴,我遇到了一个时间问题

以下是代码:

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

        RaiseToast();
        UpdateTile();

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

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

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

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

谢谢你的回答:)


共 (1) 个答案

  1. # 1 楼答案

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

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