9

我有以下问题。我在单独的线程中在 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的方法不正确,但我找不到有关它的信息。

4

1 回答 1

28

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

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

mAttachInfo在 中设置dispatchAttachedToWindow并为空dispatchDetachedFromWindow

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

于 2013-09-19T08:55:00.113 回答