Я получаю данные с сервера, используя AsyncTask
. Мне нужно периодически обновлять данные.Лучший способ периодически выполнять AsyncTasks в Android
Каков наилучший способ сделать это?
Я получаю данные с сервера, используя AsyncTask
. Мне нужно периодически обновлять данные.Лучший способ периодически выполнять AsyncTasks в Android
Каков наилучший способ сделать это?
Вы можете использовать класс 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
Вы можете сделать это либо на своем onProgressUpdate()
, либо на onPostExecute()
, исходя из ваших требований.
onProgressUpdate(Progress...)
, вызывается в потоке пользовательского интерфейса после вызова publishProgress (Progress ...). Время выполнения не определено. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации индикатора выполнения или отображения журналов в текстовом поле.
onPostExecute(Result)
, вызывается в потоке пользовательского интерфейса после завершения вычисления фона. Результат вычисления фона передается на этот шаг в качестве параметра.
http://developer.android.com/intl/de/reference/android/os/AsyncTask.html
Установка будильника с AlarmManager и позвонить AsyncTask
в вашем AlarmReceiver
классе.
Hi Macarse, Thanx для ответа. Но можете ли вы рассказать мне, как я могу назвать класс AsyncTask, который является внутренним классом моей активности? –
его следует определять как 'public static class' и называть его: ' (new YourActivity.YourAsyncTask()). Execute(); ' – Macarse
Просто укажите одну из возможностей. Вы также можете использовать класс ScheduledThreadPoolExecutor. У него, как правило, больше возможностей TimerTask.
Чтобы уточнить ответ macarse, вы действительно можете «set an alarm with AlarmManager and call your AsyncTask in your AlarmReceiver class».
Проблема, которую я поднял в связанном сообщении, все еще стоит: Я не знаю, есть ли какие-либо проблемы с жизненным циклом, связанные с созданием экземпляра AsyncTask из WakefulBroadcastReceiver, то есть я не знаю, может ли приведенное выше решение привести чтобы MyAsyncTask был убит преждевременно.
Thanx :) Работал для меня. –