Anonyme thread-Klasse, die sich in Java
Dies ist ein Java-syntax Frage, aber nur für einige Hintergrundinformationen.
Mit android habe ich eine kleine app, die ging wirklich sehr langsam und oft abgestürzt ist, weil, wenn eine Schaltfläche angeklickt wurde, wird die onClick () - Methode geändert Grafiken für die verschiedenen Tasten. Es war wirklich plump und langsam, und ich fand heraus, nach einer Suche im Netz, dass das problem ist sehr verbreitet, und beim Wechsel zu viele Bilder in der onClick () - Methode, Ihr bestes, um Sie in einem separaten thread. Und irgendeine person gab den code, dies zu tun.
new Thread(new Runnable() {
public void run() {
quest.post(new Runnable() {
public void run() {
correct = nextQ();
}
});
}
}).start();
Den nextQ () - Methode und die "quest" TextView sind von mir. Es ist nicht wirklich relevant für meine Frage, was Sie tun, aber nextQ gibt es eine Datenbank, Suche und updates, Bilder, und es läuft außerhalb der thread ist wirklich sehr langsam und crashy.
Jetzt habe ich kopiert und eingefügt, diesen code in mein code und es läuft wunderbar. Ein glückliches Ende. Aber ich habe nicht das Gefühl bequem mit code die ich nicht verstehe. Und ich weiß nicht, Java sehr gut. ALSO habe ich recherchiert wie ich konnte, anonyme innere Klassen, aber ich bin immer noch ratlos durch den code.
So der anonyme thread-Klasse erweitert, und wie es ist-argument verwendet eine anonyme Klasse implementieren von runnable, in denen das "Fleisch" der code platziert wird..
Fragen:
1)Warum sollte ich dies tun? Ich kann verstehen, mit thread ODER runnable, aber warum zusammen?
2)Wie funktioniert das? Ich ging zurück zu den Grundlagen-thread und runnable, aber ich sehe nicht, wie Sie mit Ihnen zusammen auf diese Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Runnable
SchnittstelleThread
Klasse. So sind Sie nicht erweitern Thread, Sie sind nur instanziiert, und übergeben Sie ein argument.start()
den thread. So ist dierun()
- Methode des übergebenen Arguments aufgerufen, in einem neuen thread.Müssen Sie dies tun, weil:
Runnable
definiert was ausgeführtThread
tatsächlich ausführt.Ihre Verwirrung ist verständlich, da eine
Thread
ist auchRunnable
. Das ist der Grund, warum in Java 5 die Vollzieher Rahmen wurde eingeführt, die getrennt den execution-Mechanismus (Testamentsvollstrecker) aus den ausgeführten code (Runnable
oderCallable
).Nein das tut es nicht. Es implementiert Runnable.
Wenn Sie Ausführbar sind, benötigen Sie noch führen Sie es irgendwie, und ein Weg, dies zu tun, ist ein neues Thema erstellen, und geben Sie es Ausführbar (das ist, was wird hier getan).
new Thread(runnable)
erzeugt eine neue Thread, die können Sie dann starten(). Ausgeführt wird der code in der Runnable die Methode run ().Runnable
enthält den code, der ausgeführt werden soll (eine alternative istCallable
).Thread
steuert, wie und Wann der code ausgeführt wird (alternativen sindExecutorService
oder das aufrufen von run() nicht direkt für die synchrone Ausführung auf dem aktuellen Thread)Im Allgemeinen (und damit diese beiden Funktionen abgesehen), Sie wollen nicht zu verlängern Thread, Sie wollen nur zu implementieren Runnable oder Callable.
Ist es möglich, zu erweitern Thread und direkt umsetzen ausführen (anstatt es zu delegieren, um das Lauffähig ist), aber das ist eine Art der alten Schule. Wenn Sie wurden für die Neugestaltung der Java-API-heute-Thread wäre wahrscheinlich nicht implementiert Runnable mehr. Thread ist eher ein Läufer als ein Runnable.
new Runnable(){ stuff}
, nichtnew Thread(){stuff}
, also der Implementierung von Runnable, nicht zu verlängern Thread hier.