如何一个接一个地执行一个异步任务?

时间:2016-08-27 23:06:28

标签: java android android-asynctask

我希望在另一个之后执行一个异步任务。这里,如果异步任务2将被执行,则取决于异步任务的值。 这就是我想要实现的目标

select 
    pl.userid, 
    pl.pricelistid, 
    pl.offerid,
    sum(case when pl.type = 0 then 1 else 0 end) as 'times_viewed',
    sum(case when pl.type = 1 then 1 else 0 end) as 'times_clicked',
    max(pld.Title) as 'Title',
    max(pld.URL) as 'URL',
    max(pld.Model) as 'Name'
from PriceList pl
inner join PriceListDetails pld on pld.OfferId = pl.OfferId and pld.pricelistid = pl.pricelistid
where pl.pricelistid in (
    select articleid
    from c
    where c.state = 2
    and c.Created >= datediff(dd,0,getdate())
)
group by pl.userid, pl.pricelistid, pl.offerid
having sum(case when pl.type = 1 then 1 else 0 end) > 0

根据我的理解,这里x的值永远不会是0以外的任何值,因为条件if(x == 2)将在A1完成之前执行。 我希望在A1任务完成时执行条件if(x == 2)。

现在我知道在A1的onPostExecute中执行A2会有效,但我的情况要求我独立执行A2。

2 个答案:

答案 0 :(得分:0)

您需要在第一个AsyncTask的onPostExecute()方法中执行第二个asyncTask。

答案 1 :(得分:0)

您可以在AsyncTask内完成工作。使用Runnable作为参数:

private class WorkerTask extends AsyncTask<Runnable, Void, Void> {

        @Override
        protected Void doInBackground(Runnable... runnables) {
            for (Runnable task : runnables) {
                task.run();
                publishProgress();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            //update ui
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            //done
            super.onPostExecute(aVoid);
        }
}

你会像这样使用它:

Runnable taskOne = new Runnable() {
    @Override
    public void run() {
        doSomeWork();
    }
};

Runnable taskTwo = new Runnable() {
    @Override
    public void run() {
        doSomeMoreWork();
    }
};

new WorkerTask().execute(taskOne, taskTwo);
相关问题