2012-11-06 5 views
7

다음과 같은 문제가 있습니다.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을 반환 :이 같은 별도의 스레드에서지도보기에 경로를 drawning하고 있습니다. 문제는 무엇이 될 수 있습니까?

PS 처리기를 가져 오는 것이 잘못된 방법 일 수는 있지만 정보를 찾을 수 없습니다. 뷰가 부착되어 있지 않기 때문에

+0

나는 메인 스레드 바깥에 아무것도 그릴 수 없다고 생각한다. 이것을 확인하십시오 : http://android-developers.blogspot.com.br/2009/05/painless-threading.html – Bilthon

+0

예, 맞습니다,하지만 UI 스레드에 오버레이를 추가 한 다음 mapView에 postInvalidate를 호출했습니다. 별도의 스레드에서만 계산. – Bracadabra

+0

어쩌면 – njzk2

답변

21

getHandler 방법 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

관련 문제