【问题标题】:Run multiple Asynctask one after another when a condition is satisfied满足条件时一个接一个地运行多个Asynctask
【发布时间】:2015-07-27 07:27:37
【问题描述】:

我的应用程序中有多个异步任务,我想在满足特定条件时执行它。例如,

Task1 类扩展 AsyncTask...

Task2 类扩展 AsyncTask..

Task3 类扩展 AsyncTask...

我有一个 while 循环,用于从地图中迭代一些值。 例如:

while(iterator.next())

{

 Map.Entry pair = (Map.Entry) it.next();

            String title = pair.getKey().toString();

if(title.equals("one"))

{

//execute task1;

}else if(title.equals("two"))

{

//execute task2;

}

etc..
}

这是我目前使用的示例代码。 每个任务都包含一个进度对话框,该对话框从 onPreExcecute() 和 在 onPostExecute() 上被解雇。

我的问题是我想一次只执行一项任务。 在我的代码中,所有任务都同时启动,进度对话框将相互重叠。所以有任何方法一次只执行一个任务, 提前谢谢。

【问题讨论】:

  • 尝试在一个异步任务中创建
  • 从一个 Asynctask 开始,在 onPostExecute 上调用下一个。
  • 保留一个任务队列,当第一个任务结束时它会在 postExe 中调用下一个任务
  • 感谢重播,但我无法从 onPostExecute 调用 Asynctask,因为我有一个带有字符串列表的哈希映射,基于该字符串,我想执行任务。所以我不想执行所有任务。
  • 你可以在每个 onPostExecute 中测试条件,不是吗?

标签: android android-asynctask


【解决方案1】:

这里的问题是while循环。即使任务在后台运行,循环也会继续运行。所以你必须修改你的代码,使循环条件只有在一个任务完成时才会触发。

要处理进度条问题,请创建一个可以被所有 asyncTask 共享的全局进度条对象。

请参阅以下链接以检查 AsynTasks 的状态。 AsynTask Status

【讨论】:

    【解决方案2】:

    与 progressDialog 重叠的主要原因是运行多个 asnyntask 。 所以你开始第一个 asyntask 和调用 next 形式它的 postExcecutive。

    【讨论】:

      【解决方案3】:

      你对AsyncTask有误解。 AsyncTask 的默认执行器是串行执行器,这意味着它将在特定进程中按串行顺序一次执行一个任务。但是为什么一次显示进程对话框呢?看了AsyncTask的代码,可以在函数executeOnExecutor中找到原因:

      public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
                  Params... params) {
          mStatus = Status.RUNNING;
          onPreExecute();
          mWorker.mParams = params;
          exec.execute(mFuture);
          return this;
      }
      

      你可以发现onPreExecute方法在执行之前被调用了,即它不是串行调用的。所以进度对话框会同时出现。

      我认为您可以通过在主活动中仅使用一个进度对话框来修改代码,并按其状态显示或隐藏对话框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        相关资源
        最近更新 更多