2012-11-06 14 views
7

私は次の問題があります。私はこのような別のスレッドでのMapView上のルートをdrawningよ:なぜgetHandler()がnullを返すのですか?

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(); 
     } 

しかし、私はハンドラを取得するときにデバッグモードハンドラで返され、エラーメッセージが表示されるが、それは、nullを返します。何が問題なの?

PS Handlerを取得する方法が間違っている可能性がありますが、その情報が見つかりませんでした。ビューが装着されていないため

getHandler
+0

私はあなたがメインスレッドの外に何も描画することはできないと信じています。これをチェックしてください:http://android-developers.blogspot.com.br/2009/05/painless-threading.html – Bilthon

+0

はい、そうですが、UIスレッドにオーバーレイを追加してから、mapViewでpostInvalidateを呼び出します。別のスレッドでの計算のみ。 – Bracadabra

+0

あなたはおそらく – njzk2

答えて

21

方法はnullを返す:

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

mAttachInfodispatchAttachedToWindowに設定し、dispatchDetachedFromWindowにゼロにされます。

代わりのmapView.getHandler().post()あなたは(getHandler().post()またはViewRootImpl.getRunQueue().post()を使用するように思われる)を直接mapView.post()を使用することができます。

+0

ありがとう!投稿を使用すると、これは本当にシンプルで便利になります。 – yuku

関連する問題