Archive for May, 2010

invokeAndWait und performSelectorOnMainThread

Wednesday, May 19th, 2010

Wie 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.

  1. UIApplication.getApplication().invokeAndWait( new Runnable() {
  2.    public void run() {
  3.         // modify the UI
  4.    }
  5. });

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:

  1. [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.