第二个AsyncTask没有执行

时间:2012-11-30 15:11:13

标签: java android multithreading sockets android-asynctask

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

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

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

但是,永远不会创建或执行名为AsyncTask的{​​{1}}。我试图更改顺序但是然后没有创建或执行发射器......

那有什么不对吗?

5 个答案:

答案 0 :(得分:11)

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

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

但是线程池大小为5,如果添加第六个任务,它将被添加到队列中,并且在5个线程中的一个完成之前不会执行。

答案 1 :(得分:2)

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

根据文件:

  

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

     

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我曾为同时执行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

答案 4 :(得分:0)

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