Одновременно выполняются две разные задачи AsyncTasks

У меня есть две полные различные реализации AsyncTask , скажем, AT1 и AT2 .

Сначала выполняется AT1 , затем выполняется AT2 . AT1 ждет в doInBackground пока AT2 не выполнит свою задачу, опросив эти данные каждые 500 мс. Но этого никогда не бывает.

Так что я в основном хочу это: Введите описание изображения здесь

Но, похоже, это так: Введите описание изображения здесь
Кроме того, AT1 никогда не выполняется, и AT2 никогда не запускается.

Есть ли способ, которым я могу заставить эти две AsyncTask s выполняться на двух отдельных потоках или есть другое решение для этого?

Невозможно сначала запустить AT2 и после этого выполнить AT1 .

РЕДАКТИРОВАТЬ
Для пояснения: AT1 выполняется, когда пользователь открывает конкретный экран и ему необходимо загрузить данные для этого экрана в зависимости от местоположения. AT2 выполняется при изменении местоположения, и когда это произойдет, некоторые вычисления сделаны, которые не могут быть выполнены в потоке пользовательского интерфейса.

Когда AT2 никогда не выполнялся, AT1 не имеет места для загрузки данных, поэтому ему нужно дождаться завершения AT2 . Когда AT2 был выполнен, данные о местоположении уже есть, и AT1 не нужно ждать.

Кроме того, эта проблема возникает в ICS, а не в Android 2.3, как это предлагает этот ответ .

Когда я разместил этот вопрос, этот вопрос появился в разделе « Related ». Он рекомендует использовать executeOnExecutor , я реализовал это следующим образом:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { new SetLocationAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location); } else { new SetLocationAsyncTask().execute(location); } 

Какой смысл иметь две асинхронные задачи, если кто-то ждет другого? И если вы хотите это сделать, почему бы не начать первый второй и поставить «сделанные» вещи во вторую задачу?

Похоже, вам может потребоваться переосмыслить вашу логику – если вы начинаете поток, который затем должен ждать, пока другой поток выполнит какую-то работу, почему бы просто не работать с первым потоком?

Если вам действительно нужны 2 AsyncTasks, сначала собирайте все данные и не запускайте их до тех пор, пока первое не закончится – прочитайте о onPostExecute в документах.