Я получаю данные с сервера с помощью AsyncTask
. Мне нужно периодически обновлять данные.
Каков наилучший способ сделать это?
Я получаю данные с сервера с помощью AsyncTask
. Мне нужно периодически обновлять данные.
Каков наилучший способ сделать это?
Вы можете использовать класс 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
Установите будильник с AlarmManager и вызовите AsyncTask
в своем классе AlarmReceiver
.
Вы можете сделать это либо на onProgressUpdate()
, либо на onPostExecute()
на основе вашего требования.
onProgressUpdate(Progress...)
, вызывается в потоке пользовательского интерфейса после вызова publishProgress (Прогресс...). Время выполнения undefined. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации строки выполнения или отображения журналов в текстовом поле.
onPostExecute(Result)
, вызывается в потоке пользовательского интерфейса после завершения фонового вычисления. Результат вычисления фона передается на этот шаг в качестве параметра.
http://developer.android.com/intl/de/reference/android/os/AsyncTask.html
Просто укажите одну из возможностей. Вы также можете использовать класс ScheduledThreadPoolExecutor. У него, как правило, больше возможностей TimerTask.
Чтобы разработать ответ macarse, вы действительно можете установить будильник с помощью AlarmManager и вызвать свою AsyncTask в своем Класс AlarmReceiver.
Проблема, которую я поднял в связанном сообщении, все еще стоит: я не знаю, есть ли какие-либо проблемы жизненного цикла, связанные с созданием AsyncTask из WakefulBroadcastReceiver, т.е. я не знаю, может ли приведенное выше решение привести к MyAsyncTask будучи убитым преждевременно.