2013-12-14 2 views
0

onLocationChanged 메서드에서 많은 작업을하고 있는데, 위치 관리자가 상태를 달성하더라도 모든 작업이 완료 될 때까지 메서드를 잠그고 싶습니다.확실히 모든 작업이 onLocationChanged 메서드에서 실행됩니다.

예를 들어

나는 다음과 같은 코드가 있습니다 :

private LocationManager _locMgr; 
protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
       _locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      _locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 2, this); 
} 

public void onLocationChanged(Location location) { 

//do alot of job 

} 

내가 직면하고 문제가을 locationManager의 시간은 2 초 이상 2m가 onLocationChanged을 (실행합니다) 경우에도보다 큰 경우 완료되지 않은 작업이 있습니다.

누군가 제발 도와주세요.

당신이 onLocationChanged()가 완료되기 전에 호출되어 있는지 확인하는 경우
+1

그냥 미터를 변경하고 두 번째? – user2511882

+0

@ user2511882 나는 그렇게했지만, onLocationChanged()에서 모든 작업을 실행하는 데 걸리는 정확한 시간을 알지 못하므로 정확한 시간을 알면 그 시간에 따라 미터와 초를 바꿀 것입니다! – Izzo32

답변

2

,이 시도 :

가 활동 필드 private bolean isAllDone = true;
를 선언 선언 잠금 객체 onLocationChange 테스트 그것에 그런 private final Object lock = new Object();

:

public void onLocationChanged(Location location) { 

    if(isAllDone){ 
     synchronized (lock){ 
      if(isAllDone){ 
       isAllDone = false; 
       //do alot of job 
       isAllDone = true; 
      } 
     } 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 아직 시도하지는 않았지만 질문이 있습니다. onLocationChanged() 메서드를 다시 호출해도 작업이 완료되도록 보장 할 수 있습니까? – Izzo32

+0

좋아, 나는 동기화에 대해 읽었으며 확실하게 일을 끝낼 것이다 :) 감사합니다. 감사합니다. 감사합니다. – Izzo32

관련 문제