invokeAndWait und performSelectorOnMainThread
Wednesday, May 19th, 2010Wie bei Swing darf bei einer Blackberry-Applikation nur der Event-Dispatching Thread die UI-Komponenten modifizieren. Muss aus einem Background-Thread (bsp. bei der GPS-Lokalisierung oder nach dem Parsen von XML) eine UI-Komponente modifiziert werden, so muss dies über UIApplication.invokeAndWait oder UIApplication.invokeLater geschehen.
- public void run() {
- // modify the UI
- }
- });
Beim iPhone OS ist das Prinzip identisch: Nur der Main-Thread darf UIKit-Komponenten verändern. Hier gibt es ebenfalls eine einfache Methode (performSelectorOnMainThread) um Code auf dem Main-Thread auszuführen:
- [delegate performSelectorOnMainThread:@selector(parserDidParse) withObject:nil waitUntilDone:NO];
Mit dieser Zeile wird der Main-Thread veranlasst, die Methode “parserDidParse” des “delegate”-Objekts ohne Parameter aufzurufen.
An diesem Beispiel sieht man wieder, wie stark sich die Konzepte von Blackberry und dem iPhone OS ähneln.