2017-10-18 18 views
2

Ich arbeite an einer App und möchte einige Daten an den Server senden. Ich konnte die Daten an den Server senden, wenn die Updates, die ich an den Server gesendet habe, periodisch waren.Asynctask in einer Warteschlange aufrufen

Aber jetzt ist es nach Benutzerinteraktion. Ich muss 1 oder mehr Aufrufe an den Server senden. Ich kann nicht überspringen und jeden Anruf in Richtung Server weglassen. Gerade nehme an den folgenden Fall:

Fall:

Lassen Sie sagen, ich einen Knopf auf seinem Click habe ich starten eine asyntask die einige Daten auf dem Server gesetzt und lassen Sie nehme an, es 5 bis 6 Sekunden dauert. Aber ich möchte mehrere asyntask auslösen, wenn Benutzer die Taste mehrmals drücken. Nehmen wir an, er drückt den Knopf 7 Mal hintereinander. Daher muss die 7 AsyncTask nacheinander in einer Warteschlange ausgeführt werden.

Ich habe von Schedular und allen anderen gehört, aber ich bin nicht in der Lage zu verstehen, wie man mit ihnen auch asynctask arbeitet.

Mögliche Lösung: Ich kann Taste deaktivieren, bis und wenn erste Async-Task nicht abgeschlossen ist, aber ich will es wirklich nicht tun, weil unter den Anforderungen und Anforderungen muss ich Async-Task so oft wie Benutzer aufrufen drückt den Knopf.

bitte helfen Sie mir, jeder Quellcode wird geschätzt.

Hinweis: Mit asynctask habe ich nichts, um die Benutzeroberfläche zu aktualisieren.

Update:

unter meinem Bedürfnis möchte ich mit spezifischen Daten der AsyncTask in die Warteschlange und es muss automatisch ausgeführt werden, wenn die vorherige Aufgabe abgeschlossen ist und wenn User-Exit die Anwendung es fortgesetzt werden sollte, bis und es sei denn, es läuft schließt die Ausführung aller in der Warteschlange befindlichen asynctask ab.

+0

möchten Sie gleichzeitig ausführen? –

+0

unter meiner Notwendigkeit Ich möchte die asynctask mit bestimmten Daten in die Warteschlange und es muss automatisch ausgeführt werden, wenn die vorherige Aufgabe abgeschlossen ist und wenn Benutzer die Anwendung beenden, sollte es weiter ausgeführt werden, und bis es die Ausführung aller in der Warteschlange eingereiht asynctask beendet. –

+0

Dann müssen Sie diese Dinge auch in Ihrer Frage hinzufügen. Bitte bearbeiten Sie Ihre Frage –

Antwort

1

Angenommen, er drückt den Knopf 7 Mal in Folge. Daher muss die 7 AsyncTask nacheinander in einer Warteschlange ausgeführt werden.

Je nachdem, auf welche API Ihre App zielt, müssen Sie einfach nichts Besonderes tun. Official documentation reads:

Reihenfolge der Ausführung

Wenn zuerst eingeführt, AsyncTasks wurden seriell auf einem einzigen Hintergrund-Thread ausgeführt wird. Beginnend mit DONUT, war dies in einen Pool von Threads geändert, so dass mehrere Aufgaben in parallel arbeiten können. Beginnend mit Bienenwabe, durch parallele Ausführung

verursacht Aufgaben ausgeführt werden, auf einem einzigen Thread gemeinsame Anwendungsfehler zu vermeiden

deshalb von Android starten 3.0 execute() ist alles, was Sie wirklich brauchen, was bedeutet, es sei denn, Sie alte Versionen der Plattform unterstützen Sie sollte standardmäßig eine serielle Ausführung sehen.

Alternativ können Sie AsyncTask zugunsten von IntentService ablegen, die nacheinander ausgeführt werden.

+0

Handsls ist gut Das ist gut. meine minimale Unterstützung ist Jellybeans –

+0

Ich habe es getestet, lass es laufen alle aysnctask zusammen lassen sagen Wenn ich Knopf zweimal klicke, habe ich bemerkt, dass sie auflegen und braucht mehr Zeit als sonst –

+0

nicht sicher, was "mehr als üblich" bedeutet und Wie du es gemessen hast, aber die Frage war, wie man AsyncTasks nacheinander ausführt. Und ich habe genau das beantwortet. Alternativ hindert Sie nichts daran, Ihre eigene Warteschlange zu schreiben, um die bereitgestellten Lösungen (inl. IntentService) zu verwalten, die Ihren Anforderungen nicht entsprechen. Aber das ist nicht der Bereich Ihrer aktuellen Frage. –

Verwandte Themen