AsyncTask в простом классе или в Activity?

1

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

Теперь какой из этих двух способов лучше подходит: просто создайте класс как задачу?

public class MyCustomTask extends AsyncTask

Использовать с:

 new MyCustomTask().execute();

Или создать Actitvity, который сам запускает задачу, и называть это Actitivy по намерению?

public class MyCustomActivity extends Activity {
  onCreate() {
    new MyCustomTask().execute();
  }

  private class MyCustomTask extends AsyncTask<..>();
}

Использовать с:

Intent intent = new Intent(this, MyCustomActivity.class);
  • 0
    stackoverflow.com/a/10666475/776244
  • 0
    да, я знаю, но это не общий вопрос, а специфический для такого подхода асинктической задачи!
Показать ещё 1 комментарий
Теги:
android-activity
android-asynctask

4 ответа

3
Лучший ответ

Если у вас есть раздельная AsyncTask и нужно выполнять манипуляции с пользовательским интерфейсом в postExecute, есть 3 способа ее выполнения:

  1. переопределите его в своей деятельности. В подклассе добавляется только код манипулирования пользовательским интерфейсом.

  2. создать интерфейс и использовать его в качестве слушателя. см. здесь

  3. передайте свою активность в качестве параметра для AsyncTask. см. здесь

Для 2 и 3 вы хотите проверить, активна ли активность в postExecute().

2

Вот как я делаю ASyncTask в своих действиях:

public class MyClass extends Activity {

     @Override
     public void onClick(View v) {
          MyNewThread thread = new MyNewThread();
          thread.execute();
     }

     private class MyNewThread extends ASyncTask<Void, Void, Void> {
          //Code goes here
     }

}

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

1

Просто оставайтесь прежними, если AsyncTask взаимодействует с Activity, иначе создайте отдельный. Преимущество использования AsyncTask как внутреннего класса заключается в том, что этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками.

1

Нет причин создавать отдельную Activity исключительно для запуска AsyncTask. Просто создайте его как отдельный класс и при необходимости перейдите в Context. Просто убедитесь, что вы не пропустите его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню