【问题标题】:Second AsyncTask not executing第二个 AsyncTask 未执行
【发布时间】:2012-11-18 19:55:40
【问题描述】:

我有 2 个 AsyncTask,一个创建套接字连接,另一个使用这些套接字传输对象。我的代码是这样的:

try {
        connectat = true;
        transmitter = new SocketTransmitter();
        transmitter.execute();
        connector = new socketConnector();
        connector.execute(owner);

        this.open();
    } catch (IOException e) {

但是,从未创建或执行名为 socketConnectorAsyncTask。我尝试更改顺序,但未创建或执行发送器...

这有什么问题?

【问题讨论】:

    标签: java android multithreading sockets android-asynctask


    【解决方案1】:

    当 HONEY COMB 将多个 AsyncTask 执行从并发更改为顺序时,我讨厌它。 所以每次我执行一个 AsyncTask 时,我都会做这样的事情。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    } else {
        task.execute();
    }
    

    但是线程池大小是5,如果你添加第六个任务,它将被添加到一个队列中,直到5个线程中的一个完成后才会执行。

    【讨论】:

    • 哇,你太棒了!谢谢!这真的很有效,让我很开心^^
    【解决方案2】:

    由于我不知道您使用的是哪个API级别,建议您通过ASYNC TASK

    根据文档:

    首次引入时,AsyncTask 是在单个后台线程上串行执行的。从 DONUT 开始,这被更改为允许多个任务并行运行的线程池。从 HONEYCOMB 开始,任务在单线程上执行,以避免并行执行导致的常见应用程序错误。

    如果你真的想要并行执行,你可以调用executeOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.

    【讨论】:

      【解决方案3】:

      您是否尝试过在connector's onPostExecute() 中执行transmitter 或反之亦然?

      【讨论】:

      • 不可能,因为这两个 asyncTask 都有阻塞并且可能是无限的。
      【解决方案4】:

      我写了一个类来同时执行 AsyncTask。

      检查一下:

      Android-AsyncTask-Executor

      在任何 Android 操作系统版本上同时运行 AsyncTask 需要所有工作,最好使用:

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
          task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
      } else {
          task.execute();
      }
      

      因为 AsyncTask.THREAD_POOL_EXECUTOR 仅在 api >= 11 上可用

      在我的课上你只需要写:

      AsyncTaskExecutor.executeConcurrently(task, params);
      

      仅此而已。 没有错误 Android 2.x、3.x 和 4.x

      【讨论】:

        【解决方案5】:

        就像 Robin Chander 所说,它很可能是串行运行的,您可以使用 executeOnExecutor...但它直到 Android 3.0 才可用。如果你想要完全兼容,你需要转储AsyncTask 并使用Runnable。如果您需要在 UI 线程上报告结果,请不要忘记使用Handler

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-28
          • 2022-07-08
          • 1970-01-01
          • 1970-01-01
          • 2021-06-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多