我遇到了以下问题。我在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的错误方法,但我无法找到有关它的信息。
答案 0 :(得分:24)
getHandler
方法返回null
,因为未附加视图:
public Handler getHandler() {
if (mAttachInfo != null) {
return mAttachInfo.mHandler;
}
return null;
}
mAttachInfo
在dispatchAttachedToWindow
中设置,并在dispatchDetachedFromWindow
中隐藏。
而不是mapView.getHandler().post()
,您可以直接使用 mapView.post()
(似乎使用getHandler().post()
或ViewRootImpl.getRunQueue().post()
)。