Два разных AsyncTasks выполняются одновременно

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

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

Так что я в основном хочу это: enter image description here

Но то, что, кажется, происходит так: enter image description here
КромеAT1 никогда не делается, иAT2 никогда не запускается

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

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

EDIT
В целях разъяснения:AT1 выполняется, когда пользователь открывает конкретный экран, и ему необходимо загрузить данные для этого экрана в зависимости от местоположения.AT2 выполняется при изменении местоположения, и когда это происходит, выполняются некоторые вычисления, которые невозможно выполнить в потоке пользовательского интерфейса.

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

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

 nhaarman13 июн. 2012 г., 09:52
Тем не менее, я нашел этот пост:stackoverflow.com/questions/4068984/…Я буду исследовать это.
 Christine13 июн. 2012 г., 09:51
Вы можете опубликовать код?
 nhaarman13 июн. 2012 г., 09:52
Оба должны выполнять сетевые операции, иAT1 не всегда выполняется, еслиAT2 выполнен.
 Mitch Wheat13 июн. 2012 г., 09:50
«AT1 ожидает в doInBackground, пока AT2 не выполнит свою задачу» - так нет смысла работать асинхронно .....?

Ответы на вопрос(3)

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

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

 nhaarman13 июн. 2012 г., 09:58
См редактировать в вопросе
Решение Вопроса

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    new SetLocationAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location);
} else {
    new SetLocationAsyncTask().execute(location);
}
 17 авг. 2015 г., 07:47
Благодарю. Ты спас мой день :)

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

 nhaarman13 июн. 2012 г., 09:55
Обе Asynctasks должны выполнять сетевые операции, поэтому Asynctasks необходимы. Кроме того, AT1 выполняется по запросу пользователя (открыть конкретный экран), AT2 выполняется при изменении местоположения.
 13 июн. 2012 г., 10:09
Я согласен с Барри, там должно быть гораздо более простой способ сделать это, даже если вы используете две асинхронные задачи. Я бы не сделал одного зависимым от другого. Но мне нужно больше знать о приложении, чтобы сказать больше.

Ваш ответ на вопрос