AsyncTask execute() oder executeOnExecutor()?

Lesezeit: 2 Minuten

Benutzer-Avatar
Rashad.Z

Was ist der Unterschied zwischen verwenden execute() und executeOnExecuter()?

  • Wie funktioniert execute() Aufgaben standardmäßig ausführen? (seriell oder parallel?)

  • Was sollte für neue SDKs >16 verwendet werden?

  • Ist es empfehlenswert, die parallele Ausführung zu verwenden (THREAD_POOL_EXECUTOR) für Aufgaben statt seriell, auch wenn es für die Anwendung keine Rolle spielt oder das von der Anzahl abhängt AsyncTasks wird das hingerichtet?

  • Die parallele Ausführung wurde standardmäßig in der API von AsyncTask nach dem Ice Cream Sandwich-Ziel deaktiviert. Wenn Sie also weiterhin eine parallele Ausführung in Ihren AsyncTasks wünschen, müssen Sie verwenden executeOnExecutor.

    – IgorGanapolsky

    10. Oktober 2016 um 16:42 Uhr


Benutzer-Avatar
Raul Sharma

.ausführen() – Diese Funktion plant die Aufgabe in einer Warteschlange für einen einzelnen Hintergrundthread. Bedeutet, dass, wenn Sie zwei AsyncTasks aufrufen und die Methode .execute() verwenden, um sie aufzurufen, sie in einer Warteschlange ausgeführt werden (zuerst und dann als zweites).

.executeOnExecutor() – Wenn Sie eine parallele Ausführung beider AsyncTasks wünschen, können Sie diese Methode zur Ausführung von AsyncTask verwenden. Bedeutet, dass beide asyncTasks gleichzeitig ausgeführt werden.

In einfachen Worten: Die Methode .execute() erstellt einen einzelnen Thread für die Ausführung von asyncTasks, und die Methode .executeOnExecuter() erstellt einen separaten Thread für jede ayncTask.

.execute führt Aufgaben standardmäßig in serieller Reihenfolge aus.

BEARBEITET:
Wenn Sie executeOnExecutor() verwenden möchten, können Sie diesen Code verwenden:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 else
     task.execute();

Führen Sie vor der Methode HONEYCOMB execute() AsynkTask parallel aus.

Wie führt .execute Aufgaben standardmäßig aus (seriell oder parallel).

Vor API-Level 11: parallel.

API-Level 11 und höher: seriell.

welches für neue SDKs >16 verwendet werden sollte (executeOnExecuter ?)

Hängt von Ihren Anforderungen ab. Verwenden execute() wenn Sie mit dem Standard-Executor zufrieden sind. Verwenden Sie einen expliziten Executor, wenn Sie es nicht sind.

Ist es eine gute Praxis, die parallele Ausführung (THREAD_POOL_EXECUTOR) für Aufgaben anstelle der seriellen zu verwenden, auch wenn dies für die Anwendung keine Rolle spielt, oder hängt dies von der Anzahl der auszuführenden asynchronen Aufgaben ab?

Asynchrone Aufgaben sollten nur für relativ kurze Hintergrundoperationen verwendet werden. Zitieren AsyncTask Dokumentation:

AsyncTasks sollten idealerweise für kurze Vorgänge verwendet werden (höchstens einige Sekunden). Executor, ThreadPoolExecutor und FutureTask.

Während die asynchrone Aufgabe ausgeführt wird, kann der Executor-Thread keine anderen Aufgaben ausführen. Auf einem seriellen Executor mit nur einem Executor-Thread ist es einfacher, Probleme zu erkennen, wenn Ihre Aufgaben zu lange laufen. Auf einem parallelen Executor erfordert das Erkennen solcher Probleme mehr simultane Aufgaben mit langer Ausführungszeit.

Wenn Sie also wirklich zu einem parallelen Executor wechseln müssen, sind Sie wahrscheinlich besser dran, Ihr Design zu überdenken.

1206110cookie-checkAsyncTask execute() oder executeOnExecutor()?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy