2015-09-20 3 views
-2

Не удалось найти ответ на вопрос, какой из следующих способов использования AsyncTask лучше (производительность, управление памятью, дизайн мудрый)?Класс AsyncTask VS Объект AsyncTask

ОБЪЕКТ Пример

class AsyncTaskObjectExample { 

    protected AsyncTask<String, Integer, Boolean> asyncTaskObject = new AsyncTask<String, Integer, Boolean>() { 
     @Override 
     protected Boolean doInBackground(String... params) { 
      /* YOUR PROCESSES */ 
      return true; 
     } 
    }; 
} 

КЛАСС Пример

class AsyncTaskClassExample { 

    class AsyncTaskClass extends AsyncTask<String, Integer, Boolean> { 
     @Override 
     protected Boolean doInBackground(String... params) { 
      /* YOUR PROCESSES */ 
      return true; 
     } 
    } 
} 

ответ

3

Как вы упомянули классы. Первый - анонимный внутренний класс. Когда вы пишете это:

new AsyncTask<String, Integer, Boolean>() { 
     @Override 
     protected Boolean doInBackground(String... params) { 
      /* YOUR PROCESSES */ 
      return true; 
     } 
    }; 

Это становится анонимный внутренний класс, который расширяет AsyncTask.

Вы можете прочитать здесь больше об анонимных внутренних классов здесь: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

Вы можете попробовать все, что легче понять вас.

+0

Знаете ли вы о утечке памяти? –

+0

Я знаю об анонимном внутреннем классе. Но вы видите, что в классовом сценарии мы наследуем. Это может означать что-то с точки зрения управления памятью. Кроме того, мы можем создать объект уровня функции «AsyncTaskClassExample», но «AsyncTaskObjectExample» может быть только объектом уровня класса. Разве это ничего не значит? –

+0

@PareshMayani Довольно уверен, что это только проблема, если вы передаете «Активность» и сохраняете ссылку на нее в задаче. – PPartisan

Смежные вопросы