Android: AsyncTask ИЛИ обычные потоки Java с ExecutorService

В моем приложении используется Service для создания некоторых фоновых материалов. Я использую дополнительные потоки в службе для выполнения некоторых вычислений. Для этого я создаю два потока каждые 5-10 секунд, которые работают от 5 до 10 секунд. Но я не знаю, какую нить-моделью я должен использовать:

  1. AsyncTask:

    Плюсы:

    • легко использовать
    • Специфический андроид
    • Легкое взаимодействие с пользовательским интерфейсом

    Минусы:

    • Поскольку я должен использовать уровень API 10, для выполнения AsyncTasks нет ExecutorService с фиксированным пулом потоков
  2. Обычные темы Java:

    Плюсы:

    • ExecutorService с фиксированным пулом потоков

    Минусы:

    • Не так легко обрабатывать, например, UI-взаимодействие

Какую модель лучше использовать? Особенно это касается производительности. Есть ли тяжелые накладные расходы, когда я использую AsyncTasks, и является ли ExecutorService быстрее при повторном использовании потоков, чем Android, при создании новых AsyncTasks?

Solutions Collecting From Web of "Android: AsyncTask ИЛИ обычные потоки Java с ExecutorService"

Если вы посмотрите на реализацию AsyncTask , вы увидите, что он использует собственный пул потоков, используя «обычные потоки Java».

Есть ли тяжелые накладные расходы, когда я использую AsyncTasks, и является ли ExecutorService быстрее при повторном использовании потоков, чем Android, при создании новых AsyncTasks?

Между ними не должно быть существенной разницы.

Я использую иглу; Открытая, простая и мощная многопоточная библиотека для Android. С его помощью вы можете сказать такие вещи, как:

 Needle.onMainThread().execute(new Runnable() { @Override public void run() { // eg change one of the views } }); 

или

 Needle.onBackgroundThread().execute(new UiRelatedTask<Integer>() { @Override protected Integer doWork() { int result = 1+2; return result; } @Override protected void thenDoUiRelatedWork(Integer result) { mSomeTextView.setText("result: " + result); } }); 

Pros

  • Очень простой API
  • Размер пула фиксированных потоков
  • Настраиваемый размер пула потоков
  • Поддерживает взаимодействие с пользовательским интерфейсом («работать, а затем использовать результат в потоке пользовательского интерфейса»)
  • Android 1.5+
  • Ведет себя одинаково на всех версиях платформы

Cons

  • Дополнительная зависимость от библиотеки

Проверьте это на GitHub: https://github.com/ZsoltSafrany/needle