2012-11-06 26 views
7

Ich habe folgendes Problem. Ich drawning Route auf mapview in separaten Thread wie folgt aus:Warum gibt getHandler() null zurück?

public void drawRoute(final MapView mapView) { 
      new Thread(new Runnable() { 
      public void run() { 
      try { 
      //Do something useful 
      } catch (SomeException se) { 
      Handler handler = mapView.getHandler(); 
      handler.post(/*show error in UI thread*/) 
      }} 
     }).start(); 
     } 

Aber wenn ich Handler bekommen gibt es null, obwohl im Debug-Modus-Handler zurückgegeben und die Fehlermeldung angezeigt wird. Was kann das Problem sein?

PS Möglicherweise ist es falsch, Handler zu bekommen, aber ich konnte keine Informationen darüber finden.

+0

Ich glaube, dass Sie nichts außerhalb des Hauptthreads zeichnen können. Überprüfen Sie dies: http://android-developers.blogspot.com.br/2009/05/painless-threading.html – Bilthon

+0

Ja, Sie haben Recht, aber ich füge Overlays in UI-Thread und dann postInvalidate auf mapView aufrufen, gibt es nur Berechnungen in separaten Thread. – Bracadabra

+0

Sie brauchen wahrscheinlich ein 'run' irgendwo um – njzk2

Antwort

21

getHandler Die Methode liefert null weil die Sicht nicht angebracht ist:

public Handler getHandler() { 
    if (mAttachInfo != null) { 
     return mAttachInfo.mHandler; 
    } 
    return null; 
} 

mAttachInfo in dispatchAttachedToWindow und genullt in dispatchDetachedFromWindow gesetzt ist.

Statt mapView.getHandler().post() können Sie direkt mapView.post() verwenden (die getHandler().post() oder ViewRootImpl.getRunQueue().post() zu verwenden scheint).

+0

Danke! Mit Post wird dies sehr einfach und nützlich. – yuku

Verwandte Themen