public void Overlayadd() {
Runnable run = new Runnable() {
@Override
public void run() {
String result = WWeb.getHttpResponse(http://xxxxxxxxxxxxxxxxxxxxx);
for (int i = 1; i < 21; i++) {
try {
String ori = WWeb.wParse(result, "R" + i);
String gps = WWeb.wParse(ori, "gps");
String name = WWeb.wParse(ori, "name");
String info = WWeb.wParse(ori, "info");
String img = WWeb.wParse(ori, "img");
PositionOverlay.addOverlay(new OverlayItem(getPoint(gps), name, img + "@" + info));
} catch (Exception e) {
}
}
mvMap.getOverlays().add(PositionOverlay);
}
};
Handler handler = new Handler();
handler.postDelayed(run, 300);
}
간단히 설명 하자면 맵뷰에서 웹에 마커 정보를 파싱해오는 스레드 입니다.
Overlayadd()라는 메서드 속에 run 을 구성해서 만들었는데
불러오는것 까진 아무 이상이 없는데 Overlayadd()를 호출하였을때 스레드 처럼 작용 하나요?
의도는 맵을 눌럿을때 저렇게 처리 안해주면 파싱해서 다 읽어온다음에 맵이 로딩이 되는데
저렇게 구성하엿을때는 맵이 로드 되고 파싱된 파커들이 뜨기 시작해서 맵 로딩속도가 빨라 졌습니다.
아직 스레드에 정확한 개념은 잘 몰라서 저렇게 쓰기는 하였는데 Overlayadd() 이 메소드가 스레드 역활을 하는지 궁금합니다.
단지 0.3초 느리게 작동 하는건지..
바람직하지 못한 모양으로 보여집니다.
우선 실행속도의 개선은 0.3초 이후에 실행하는 측면에서 나온것이라 볼수 있구요...
네트웍을 활용한다던가 반응성이 나쁜 작업
(한번 작업을 시도하면 응답을 받을때까지 시간이 원하는 반응시간을 넘을수 있는 가능성이 있는 작업)
의 경우 UI스레드가 아닌 별도의 Thread로 실행하는게 좋은데요
Handler를 사용하는 것은 UI 스레드에서 실행하겠다고 지정하는거라고 보시면 됩니다.
위의 문장의 경우 단순히 0.3초 이후에 실행하는것 이외의 다른 효과...
그러니까 비동기적으로 응답성이 나쁜 동작을 실행하여 얻는 이득을 얻을 수 없습니다.




Overlayadd() 메소드 자체가 쓰레드 역할을 하지는 않습니다.
Runnable 객체(할 일)를 Handler 객체에게 맡기는 부분을 공부해보세요.
http://developer.android.com/reference/android/os/Handler.html