Home » Android » java – Second AsyncTask not executing

java – Second AsyncTask not executing

Posted by: admin June 15, 2020 Leave a comment

Questions:

I have 2 AsyncTask, one which is creating a socket connections and anotherone that is transmitting objects using those sockets. my code is this:

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

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

However, the AsyncTask called socketConnector is never created or executed. I tried to change the order but then transmitter is not created or executed…

Whats wrong with that?

How to&Answers:

I hated it when HONEY COMB changed the multiple AsyncTask execution from concurrent to sequential.
So every time I execute an AsyncTask, I do something like this.

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

But the thread pool size is 5, if you add the sixth task, it will be added in a queue, and will not be executed until one of the 5 thread has finished.

Answer:

Since I don’t know which API level you are using, I would suggest you to go through ASYNC TASK

According to the documentation:

When first introduced, AsyncTasks were executed serially on a single background thread. Starting with DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.

Answer:

Have you tried executing transmitter in connector's onPostExecute() or vice versa ?

Answer:

I had wrote class for execute AsyncTask concurrently.

Check it out:

Android-AsyncTask-Executor

It takes all work for running AsyncTask concurrently on any Android OS version, it is better that using:

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

Because AsyncTask.THREAD_POOL_EXECUTOR available only on api >= 11

With my class you just need to write:

AsyncTaskExecutor.executeConcurrently(task, params);

And that is all. No errors on Android 2.x, 3.x and 4.x

Answer:

Like Robin Chander said, it’s likely running serially and you can use executeOnExecutor…but it isn’t available until Android 3.0. If you want full compatibility, you need to dump AsyncTask and use Runnable. If you need to report results on the UI thread, don’t forget to use a Handler.