Ich habe eine Anwendung entwickelt, mit der Text in definierten Intervallen auf dem Android-Emulatorbildschirm angezeigt werden kann. Ich benutze die Handler
Klasse. Hier ist ein Ausschnitt aus meinem Code:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
Wenn ich diese Anwendung ausführe, wird der Text nur einmal angezeigt. Warum?
android
multithreading
Rajapandian
quelle
quelle
Antworten:
Die einfache Lösung für Ihr Beispiel lautet:
Oder wir können zum Beispiel einen normalen Thread verwenden (mit dem ursprünglichen Runner):
Sie können Ihr ausführbares Objekt nur als Befehl betrachten, der zur Ausführung an die Nachrichtenwarteschlange gesendet werden kann, und den Handler nur als Hilfsobjekt, das zum Senden dieses Befehls verwendet wird.
Weitere Details finden Sie hier http://developer.android.com/reference/android/os/Handler.html
quelle
quelle
Ich denke, kann erste Lösung von Alex2k8 für Update jede Sekunde richtig verbessern
1. Originalcode:
2. Analyse
tv.append("Hello Word")
Kosten T Millisekunden betragen, nachdem die 500- fach verzögerte Anzeigezeit 500 * T Millisekunden beträgt3. Lösung
Um dies zu vermeiden, ändern Sie einfach die Reihenfolge von postDelayed (), um Verzögerungen zu vermeiden:
quelle
Zum Wiederholen von Aufgaben können Sie verwenden
nenne es wie
Wo
Aufgabe ist die auszuführende Methode
nach der Zeit bis zur ersten Ausführung
( Intervall die Zeit für die Wiederholung der Ausführung)
Zweitens
Sie können CountDownTimer auch verwenden, wenn Sie eine Aufgabe mehrmals ausführen möchten.
Und Sie können es auch mit runnable tun. Erstellen Sie eine ausführbare Methode wie
Und nenne es auf beide Arten
ODER
quelle
Ich halte es für diesen typischen Fall für
Timer
angemessener, etwas mit einem festen Intervall auszuführen . Hier ist ein einfaches Beispiel:Die Verwendung
Timer
hat nur wenige Vorteile:schedule
Funktionsargumenten angegeben werdenmyTimer.cancel()
myTimer.cancel()
vor dem Planen eines neuen Threads aufzurufen (wenn myTimer nicht null ist).quelle
quelle
r
die noch definiert ist.Wenn ich die Dokumentation der Handler.post () -Methode richtig verstehe:
Die von @ alex2k8 bereitgestellten Beispiele sind also nicht dieselben, obwohl sie ordnungsgemäß funktionieren. Falls
Handler.post()
verwendet, werden keine neuen Threads erstellt . Sie posten einfachRunnable
in den ThreadHandler
, der von EDT ausgeführt werden soll . Danach wird EDT nur noch ausgeführtRunnable.run()
, sonst nichts.Denken Sie daran :
Runnable != Thread
.quelle
Kotlin
Java
quelle
Ein interessantes Beispiel ist, dass Sie kontinuierlich einen Zähler / eine Stoppuhr in einem separaten Thread sehen können. Zeigt auch GPS-Standort an. Während der Hauptaktivität ist der Benutzeroberflächenthread bereits vorhanden.
Auszug:
Um den Code anzusehen, siehe hier:
Thread-Beispiel zur Anzeige des GPS-Standorts und der aktuellen Uhrzeit, die neben dem Benutzeroberflächenthread der Hauptaktivität ausgeführt werden können
quelle
Jetzt können Sie in Kotlin Threads folgendermaßen ausführen:
quelle
Kotlin mit Coroutinen
In Kotlin können Sie mit Coroutinen Folgendes tun:
Probieren Sie es hier aus !
quelle