Java 第二个异步任务未执行

Java 第二个异步任务未执行,java,android,multithreading,sockets,android-asynctask,Java,Android,Multithreading,Sockets,Android Asynctask,我有两个异步任务,一个是创建套接字连接,另一个是使用这些套接字传输对象。我的代码是: try { connectat = true; transmitter = new SocketTransmitter(); transmitter.execute(); connector = new socketConnector(); connector.execute(owner); this.open()

我有两个异步任务,一个是创建套接字连接,另一个是使用这些套接字传输对象。我的代码是:

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

        this.open();
    } catch (IOException e) {
但是,从未创建或执行名为
socketConnector
AsyncTask
。我试图更改顺序,但没有创建或执行变送器


有什么问题吗?

您是否尝试过在
连接器的
中执行
发送器
,或者反之亦然?

因为我不知道您使用的是哪种API级别,我建议您检查一下

根据文件:

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

如果确实需要并行执行,可以使用线程池执行器调用
executeOnExecutor(java.util.concurrent.Executor,Object[])。


正如Robin Chander所说,它可能是连续运行的,您可以使用executeOnExecutor…但它在Android 3.0之前是不可用的。如果想要完全兼容,需要转储
AsyncTask
并使用
Runnable
。如果需要在UI线程上报告结果,请不要忘记使用
处理程序

当Honeycom将多个异步任务的执行从并发更改为顺序时,我讨厌它。 所以每次我执行一个异步任务时,我都会这样做

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

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

我已经为并发执行异步任务编写了类

请查看:

在任何Android OS版本上并发运行AsyncTask需要所有工作,最好使用:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    task.execute();
}
因为AsyncTask.THREAD\u POOL\u执行器仅在api>=11上可用

在我的课堂上,你只需要写:

AsyncTaskExecutor.executeConcurrently(task, params);

仅此而已在Android 2.x、3.x和4.x上没有错误是不可能的,因为这两个任务都有阻塞并且可能是无限的。哇,你太棒了!!非常感谢。这真的很管用,让我很开心^^