为什么getHandler()返回null?

时间:2012-11-06 16:02:32

标签: android android-mapview handler

我遇到了以下问题。我在mapview上绘制路线,在这个单独的线程中:

 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的错误方法,但我无法找到有关它的信息。

1 个答案:

答案 0 :(得分:24)

getHandler方法返回null,因为未附加视图:

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

mAttachInfodispatchAttachedToWindow中设置,并在dispatchDetachedFromWindow中隐藏。

而不是mapView.getHandler().post(),您可以直接使用 mapView.post() (似乎使用getHandler().post()ViewRootImpl.getRunQueue().post())。