2011-07-02 10 views
12

Moja aplikacja używa Service do robienia rzeczy w tle. Używam dodatkowych wątków w usłudze, aby wykonać pewne obliczenia. W tym celu tworzę dwa wątki co 5 do 10 sekund, które trwają od 5 do 10 sekund. Ale nie wiem, który wątek model powinienem używać:Android: AsyncTask LUB normalne wątki Java z ExecutorService

  1. AsyncTask:

    Plusy:

    • łatwy w użyciu
    • android specyficzny
    • łatwy UI-interakcji

    Przeciw:

    • Ponieważ muszę używać API poziom 10, nie ma ExecutorService z ustalonej puli wątków, aby wykonać AsyncTasks
  2. Normal Java wątków:

    Plusy:

    • ExecutorService ze stałą pulą wątków

    Minusy:

    • Niełatwe w obsłudze, np. UI-interakcja

Który model jest lepszy w użyciu? Szczególnie w trosce o wydajność. Czy podczas korzystania z AsyncTasks występuje duże obciążenie, a usługa ExecutorService działa szybciej w ponownym użyciu wątków niż w systemie Android podczas tworzenia nowych zadań AsyncTask?

Odpowiedz

12

Jeśli spojrzysz na implementację AsyncTask, zobaczysz, że używa ona własnej puli wątków, używając "normalnych wątków Java".

Czy istnieje ciężki napowietrznych kiedy używam AsyncTasks i jest ExecutorService szybciej niż ponowne wątki Androida w tworzeniu nowych AsyncTasks?

Nie powinno być żadnej zasadniczej różnicy między tymi dwoma.

+0

To prawda, dzięki! – Tobias

1

Używam Needle; open-source, prosta i potężna biblioteka wielowątkowości dla systemu Android.Dzięki niemu można powiedzieć takie rzeczy jak:

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

lub

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

  • bardzo proste API
  • stałym gwintem wielkości basen
  • konfigurowalny rozmiar puli wątków
  • obsługuje interakcję z interfejsem użytkownika ("d o dzieło, a następnie użyć wynik na wątku UI ")
  • Android 1.5+
  • zachowuje się tak samo na wszystkich wersjach platformowych

Wady

  • dodatkowa biblioteka zależność

Sprawdź to na GitHub: https://github.com/ZsoltSafrany/needle

+1

To wygląda obiecująco. Wypróbuję w następnym projekcie. – Tiago

Powiązane problemy