Лучший способ периодически выполнять AsyncTasks в Android

Я получаю данные с сервера с помощью AsyncTask. Мне нужно периодически обновлять данные.

Каков наилучший способ сделать это?

Ответ 1

Вы можете использовать класс Timer для планирования периодической задачи с использованием TimerTask вместо AsyncTask

Смотрите:

http://developer.android.com/reference/java/util/Timer.html

http://developer.android.com/reference/java/util/TimerTask.html

И чтобы обновить свой интерфейс, вы должны следовать этому хорошему руководству:

http://android-developers.blogspot.com/2007/11/stitch-in-time.html

Ответ 2

Установите будильник с AlarmManager и вызовите AsyncTask в своем классе AlarmReceiver.

Ответ 3

Вы можете сделать это либо на onProgressUpdate(), либо на onPostExecute() на основе вашего требования.

onProgressUpdate(Progress...), вызывается в потоке пользовательского интерфейса после вызова publishProgress (Прогресс...). Время выполнения undefined. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации строки выполнения или отображения журналов в текстовом поле.

onPostExecute(Result), вызывается в потоке пользовательского интерфейса после завершения фонового вычисления. Результат вычисления фона передается на этот шаг в качестве параметра.

http://developer.android.com/intl/de/reference/android/os/AsyncTask.html

Ответ 4

Просто укажите одну из возможностей. Вы также можете использовать класс ScheduledThreadPoolExecutor. У него, как правило, больше возможностей TimerTask.

Ответ 5

Чтобы разработать ответ macarse, вы действительно можете установить будильник с помощью AlarmManager и вызвать свою AsyncTask в своем Класс AlarmReceiver.

Проблема, которую я поднял в связанном сообщении, все еще стоит: я не знаю, есть ли какие-либо проблемы жизненного цикла, связанные с созданием AsyncTask из WakefulBroadcastReceiver, т.е. я не знаю, может ли приведенное выше решение привести к MyAsyncTask будучи убитым преждевременно.