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

0

Чтобы  создать новую асинхронную  задачу, понадобится наследовать класс AsyncTask,  как показано  на примере  каркаса  в листинге  9.9. Ваша реализация должна предусматривать классы для объектов, которые будут переданы в качестве параметров методу execute, для переменных, что станут использоваться для оповещения о ходе выполнения, а также для перемен- ных, где будет храниться результат. Формат  такой записи следующий:

AsyncTask<[Input Parameter Type], [Progress Report Type], [Result Type]>

Если не нужно или вы не хотите принимать параметры, обновлять ин- формацию  о ходе выполнения или выводить  конечный  результат,  просто укажите тип Void во всех трех случаях.

Листинг 9.9. Каркас реализации AsyncTask, в котором используются строковой параметр и два целочисленных значения, нужных для оповещения о выполнении работы и о конечном результате

private class MyAsyncTask extends AsyncTask<String, Integer, Integer> {

@Override

protected void onProgressUpdate(Integer… progress) {

// [… Обновите индикатор хода выполнения, уведомления или другой элемент пользовательского интерфейса …]

}

@Override

protected void onPostExecute(Integer… result) {

// [… Сообщите о результате через обновление пользовательского интерфейса, диалоговое окно или уведомление …]

}

@Override

protected Integer doInBackground(String… parameter) {

int myProgress = 0;

// [… Выполните задачу в фоновом режиме, обновите переменную myProgress…]

PublishProgress(myProgress)

// [… Продолжение выполнения фоновой задачи …]

// Верните значение, ранее переданное в метод onPostExecute return result;

}

}

Как показано  в листинге  9.9, дочерний  класс должен  реализовать не- сколько обработчиков  событий.

doInBackground. Принимает набор параметров  тех типов, которые определены  в реализации вашего класса. Этот метод выполняется в фоновом потоке, поэтому в нем не должно быть никакого взаимодей- ствия с элементами пользовательского интерфейса. Размещайте здесь трудоемкий код, используя метод publishProgress, который позволит обработчику onProgressUpdate передавать изменения в пользователь- ский интерфейс. Когда фоновая задача завершена, данный метод воз- вращает конечный результат для обработчика onPostExecute, который сообщит о нем в поток пользовательского интерфейса.

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

onPostExecute. Когда метод doInBackground завершает работу, конеч- ный результат  передается  в этот обработчик  событий.  Используйте его для обновления пользовательского интерфейса, как только ваша фоновая  задача завершена.  Данный  обработчик  при вызове синхро-

низируется с потоком GUI, поэтому внутри него вы можете безопасно изменять  элементы пользовательского интерфейса.

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

По теме:

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