Плохо ли иметь два внутренних класса AsyncTask в одном файле? - PullRequest
3 голосов
/ 24 февраля 2012

В одном Activity у меня есть 2 тяжелых задания.Одним из них является создание базы данных по умолчанию со строками и значениями по умолчанию.Другой выбирает все данные из базы данных, чтобы заполнить элементы интерфейса на экране.На этой странице более 100 элементов пользовательского интерфейса (статистические данные).

Теперь, было бы плохо иметь два AsyncTask класса в одном файле кода Java?Один будет использоваться для создания базы данных по умолчанию (активируется только при первом запуске), а другой будет использоваться много раз для извлечения всех данных из базы данных, необходимых для заполнения вышеупомянутых элементов пользовательского интерфейса.

Я спрашиваю о плохой практике, а не о том, можно ли использовать один и тот же класс AsyncTask для обеих тяжелых задач (через if/else).

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Неа. Не думай так. Как еще вы могли бы выполнить две фоновые задачи?

Я бы порекомендовал, однако, для ясности кода использовать шаблон проектирования, в соответствии с которым результат фоновых задач дифференцируется тем же методом с использованием кодов запроса, которые вы отправляете на AsyncTask.

Что-то вроде:

new AsyncTask1(this, 0).execute();
new AsyncTask2(this, 1).execute();

AsyncTask может затем вызвать тот же метод в Activity, и вы можете различить на основе кода запроса.

onBackgroundTaskCompleted(int requestCode, Object result) {
    if (requestCode == 0 ) {
        // do something
    } else {
        // do something else
    }

Для примера использования этого шаблона с использованием интерфейса взгляните на асинхронные классы по адресу: https://github.com/sfarooq/A-droid-lib/

1 голос
/ 24 февраля 2012

Я думаю, что можно иметь более одного AsyncTask In для активности, если они выполняют совершенно другую задачу.

1 голос
/ 24 февраля 2012

Лучший способ - взять AsyncTask и создать открытый класс, который имеет 2 метода: 1 для извлечения и один для создания базы данных.

Это действительно имеет преимущество OO , а также уменьшает ваш код и отделяет пользовательский интерфейс от BackgroundTask ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...