마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

쓰레드가 제대로 동작하지 않습니다.

0 추천

나의 현재 경위도 좌표를 실시간으로 갱신해서 화면에 뿌려주려고 하는데요.

아래 코드와 같이 무한으로 동작하는 쓰레드를 만들었는데, 처음 애플리케이션을 실행할 때 좌표값을 딱 한번만 받아오는 문제가 있습니다.

// 경위도 좌표를 가져오는 GpsInfo 클래스의 참조변수
private GpsInfo gps;

// 경위도 좌표값을 저장할 변수
private TextView latValue, longValue;

// 쓰레드 시작을 위한 핸들러
Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    updateCoorThread();
  }
};

// 무한 동작 쓰레드 생성
@Override
protected void onStart() {
  super.onStart();
  
  Thread coorThread = new Thread(new Runnable() {
    @SuppressWarnings("InfiniteLoopStatement")
    @Override
    public void run() {
      while (true) {
        try {
          handler.sendMessage(handler.obtainMessage());
          Thread.sleep(1000);
        } catch (Exception e) {
          Log.e(TAG, "Thread exception has occurred.");
        }
      }
    }
  });
  
  coorThread.start();
 }

// 쓰레드의 실제 동작 구현
public void updateCoorThread() {
  latValue = findViewById(R.id.latValue);
  longValue = findViewById(R.id.longValue);
  
  gps = new GpsInfo(MainActivity.this);
  
  // GPS 정보 가져오기
  if (gps.isGetLocation()) {
    double latitude = gps.getLatitude();
    double longitude = gps.getLongitude();
    
    String latitudeSix = String.format("%.6f", latitude);
    String longtitudeSix = String.format("%.6f", longitude);
    
    latValue.setText(latitudeSix);
    longValue.setText(longtitudeSix);
    
  } else {
    // GPS를 사용할 수 없을 때
    gps.showSettingsAlert();
  }
}

어디가 잘못된 것인지 알고 싶습니다.

LinCass (320 포인트) 님이 2018년 11월 17일 질문

2개의 답변

0 추천
coorThread 가 onStart() 함수 안에서 선언 되어 있어 onStart()가 끝날때  clear 되는 것으로 보임니다.

coorThread를  전역변수로 바꾸어 보시기 바람니다
실바람분다 (500 포인트) 님이 2018년 11월 19일 답변
0 추천
1. 경위도 는 위치가 어느정도 변경 + 지정된 타임에 따라 들어옵니다. (지정된 타임도 위치가 변경되지 않으면 바로 들어오지 않습니다.

2. 경위도는 thread 가 아니고 location listener 를 등록해서 사용합니다.  사용법을 다시 한번 확인하세요
aucd29 (218,390 포인트) 님이 2018년 11월 19일 답변
...