Изменение очерёдности выполнения асинхронных задач AsynkTask.

Рейтинг: 0Ответов: 1Опубликовано: 18.02.2015

Дано:

Есть ViewPager, содержащий фрагменты. Они стартуют чрез запрос к сервису AsynkTask-и, лезущие в эти ваши интернеты. При быстром пролистывании фрагментов запускается множество задач, становящихся в очередь.

Задача:

Надо бы как-то изменить порядок (приоритет) выполнения этих задач. Иначе задача, запущенная текущим фрагментом выполняется последней, что раздражает.

Вопрос:

Собственно вопрос в том, как получить список выполняющихся задач и поменять их очерёдность. Беглое гугленье не помогло (видать не те параметры гуглу передаю).

Ответы

▲ 1Принят

и поменять их очерёдность

Это не совсем правильный вариант. Правильнее будет отменять задачи для фрагментов, находящихся вне экрана. Для этого нужно правильно составить doInBackground() метод, чтобы можно было прервать выполнение. Например, использовать какой-то флаг, который периодически проверять, и как только он примет определенное значение, прервать выполнение таски. Так же создать, например, очередь из AsyncTask, в которой может содержаться максимум 3 (например) таски, и как только добавляется четвертая - отменять выполнение первой.

Еще один (не очень правильный) вариант - переопределить политику ThreadPoolExecutor так, чтобы он одновременно выполнял несколько тасок. Подробнее писать не буду, уже ничего не соображаю. По этому вопросу нагуглить довольно просто.