Главная » Разработка для Android » Запуск асинхронной задачи

0

Поскольку вы уже реализовали асинхронную  задачу, запустите ее, соз- дав новый экземпляр и вызвав метод execute, как показано в листинге 9.10. Вы можете передать параметры, тип каждого из которых был указан при реализации класса.

Листинг 9.10. Запуск  асинхронной задачи

new MyAsyncTask().execute("inputString1", "inputString2");

ПРИМЕЧАНИЕ

Каждый экземпляр класса AsyncTask может быть запущен всего один раз. Попытка повторного вызова метода execute приведет к выбросу исключения.

Перенос Сервиса Earthquake в фоновый поток с помощью AsyncTask

В следующем примере1 показывается, как с помощью AsyncTask перенести сетевые запросы и обработку XML, которые размещены в EarthquakeService, в фоновый  поток.

1. Создайте новую реализацию AsyncTask, дайте ей название Earthqua- keLookupTask, указав Void в качестве типа для входных параметров и конечного результата,  а также Quake для сообщений о ходе выпол- нения операций. Добавьте заглушки, которые переопределяют методы doInBackground, onProgressUpdate и onPostExecute.

private class EarthquakeLookupTask extends AsyncTask<Void, Quake, Void> {

@Override

protected Void doInBackground(Void… params) {

return null;

}

@Override

protected void onProgressUpdate(Quake… values) {

super.onProgressUpdate(values);

}

@Override

protected void onPostExecute(Void result) {

super.onPostExecute(result);

}

}

1     Все фрагменты  кода в этом примере — часть проекта Earthquake 2 из главы 9, их можно загрузить с сайта Wrox.com.

2. Перенесите  весь существующий код из метода refreshEarthquakes в новый обработчик  doInBackground. Добавьте новый вызов метода publishProgress, который  будет принимать последний  извлеченный объект Quake при обработке нового землетрясения. После завершения обработки верните null.

@Override

protected Void doInBackground(Void… params) { [ … ранее написанная обработка XML … ]

// Обработайте только что обнаруженное землетрясение addNewQuake(quake);

publishProgress(quake);

[ … ранее написанный обработчик исключительных ситуаций … ]

return null;

}

3. Отредактируйте пока что пустой метод refreshEarthquakes. Он должен создавать  и запускать  новую задачу EarthquakeLookupTask. Сперва проверьте,  не была ли ранее запущена  другая асинхронная задача. Чтобы  избежать  накладки,  необходимо  инициировать обновление только в том случае, если оно еще не начало выполняться.

EarthquakeLookupTask lastLookup = null;

private void refreshEarthquakes() {

if (lastLookup == null ||

lastLookup.getStatus().equals(AsyncTask.Status.FINISHED)) { lastLookup = new EarthquakeLookupTask(); lastLookup.execute((Void[])null);

}

}

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии