2016-06-08 6 views
0

Es ist mein erstes Mal hier. Ich hoffe ich bin mit meiner Frage klar genug.Android - Laufende Aufgaben im Hintergrund in der Reihenfolge der Anfrage

Ich möchte ein Decoder Objekt am Anfang einer Aktivität initialisiert haben und bleibt im Leerlauf, bis es Anforderung ist, Decoder.decode(int x) zu tun, die ich im Hintergrund und in der Reihenfolge der Anfrage ausführen möchte.

Zum Beispiel braucht Decoder.decode(int x) mehr als 1 Sekunde zu beenden, aber ich fordere es an, es einmal pro Sekunde auszuführen. Ich möchte einen Anruf an Decoder.decode(int x) wartet auf den vorherigen Aufruf zu beenden, bevor es mit der Ausführung beginnt.

Momentan verwende ich Service und binde es an meine Aktivität. Der Initialisierungsteil ist in onBind() erfolgt. Bei jeder Anforderung erstellt der Dienst eine AsyncTask und führt innerhalb seiner doInBackground Methode Decoder.decode(int x) aus. Ist das der richtige Ansatz oder sollte ich etwas anderes machen?

Vielen Dank für Ihre Hilfe.

+0

Sie sollten immer AsyncTask für Zeit verwenden Operationen raubend –

+0

@RajPatel Ja, ich AsyncTask jetzt bin mit aber ich dont‘wissen, wie die einen Antrag machen wartet auf den, der vor dem Start fertig ist. – Nguyen

+0

siehe 'HandlerThread' Klasse, lesen [this] (https://medium.com/@ali.muzaffar/handlerthreads-and-why-you-should-be-using-them-in-your-android-apps-dc8bf1540341 # .78reeomk6), Abschnitt 'Wie benutze ich HandlerThreads' oder [this] (https://www.safaribooksonline.com/library/view/efficient-android-threading/9781449364120/ch08.html) – pskink

Antwort

1

Sie können eine blockierende Warteschlange von AsyncTasks oder Threads verwenden, um Operationen in der richtigen Reihenfolge auszuführen. Sie können auch eine Bibliothek wie diese verwenden:

https://github.com/path/android-priority-jobqueue

Verwandte Themen