Design Entscheidung Thread oder AsyncTask

  • 3 Antworten
  • Letztes Antwortdatum
C

CoffeeCode

Ambitioniertes Mitglied
2
Ich muss mich entscheiden ob ich einen Thread oder einen AsyncTask für die Verarbeitung von Bildern durch RenderScript nehme.

Wenn ein Bild geladen und dargestellt wird, wird es über RenderScript verarbeitet, dazu gehört eine Augendetektion und eine Faltung. Dies nimmt etwa 1-2 Sekunden in Anspruch (sehr rechenintensiv). So lange ist die UI gefrohren. Daher muss die Verarbeitung ausgelagert werden. Nach der Verarbeitung werden Extrahierte Daten in einer Datenbank gespeichert, so dass das Bild sofort angezeigt werden kann nur auf die Daten muss gewartet werden.

Ich würde es gerne so umsetzen das zu beginn dummy daten in die Datenbank eingetragen werden und nach der Berechnung die richtigen.
Was wäre zu empfehlen?

Nach kurzer Suche habe ich das gefunden:
Thread
Long task in general
invoke by thread.start() method
triggered from any thread
runs on its own thread
manual thread management/code may become difficult to read

AsyncTask
small task having to communicate with main thread
invoke by excute() method
triggered from main thread
runs on worker thread
must be executed and created from the main Thread
 
Ich würde mich in dem Fall für AsyncTask entscheiden.

Begründung:

- Du willst ja den aktuellen UI Thread blockieren und wenn die Bearbeitung fertig ist etwas "ausgeben" oder etwas "mit der UImachen".
- Damit brauchst du den aktuellen Context/Activity um nach der erfolgreichen / fehlerbehafteten Ausführung sofort in die UI springen.

Mit Thread willst du bewusst auf jede UI verzichten und quasi nur einen 2ten Prozessor für irgendwelche Berechnungen haben.

Vom Programmieren oder vom Aufwand ist es fast gleich. Im Prinzip rufst du aus execute() nur eine Funktion auf. Das hat mit dem "Konstrukt" wie der Task gestartet wird letztendlich nichts zu tun. Nur mit dem was "nachher" passieren soll.
 
Ein AsynchTask ist nichts anderes als ein Wrapper der es uns erleichtert Threads zu verwenden. Intern verwendet auch der AsynchTask Threads. Technisch gesehen ist es also relativ egal für welche Option du dich entscheidest, da in beiden Fällen ein Thread verwendet wird. Ich würde dir zum AsynchTask raten um Zeit und Schreibarbeit zu sparen.
 
ok danke. Werde es dann mit einem AsyncTask versuchen.
 
Zurück
Oben Unten