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上没有错误是不可能的,因为这两个任务都有阻塞并且可能是无限的。哇,你太棒了!!非常感谢。这真的很管用,让我很开心^^