이것은 LocationManager와 관련된 효율성 문제입니다 (더 일반적으로 안드로이드에서 메모리 대 CPU 사용 관리에 관한 것입니다). 위치를 업데이트하기 위해 60 초마다 LocationManager의 getLastKnownLocation 메소드를 사용하려는 장기 실행 서비스가 있다고 가정 해 보겠습니다. 이 서비스는 TimerTask와 Time을 반복적 인 고정 지연 실행과 함께 사용합니다. 인스턴스 필드 mLocationManager를 작성하여 서비스 수명 기간 동안 유지하는 것이 더 좋습니까? 아니면 TimerTask를 실행할 때마다 LocationManager를 인스턴스화하는 것이 더 낫습니다. VM이 필요할 때만 계속 유지하는 것이 좋습니다.LocationManager를 한 번 호출하여 메모리에 보관하거나 필요할 때만 호출하는 것이 더 좋습니까?
public class ProximityService extends Service {
private LocationManager mLocationManager;
@Override
public void onCreate() {
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Timer timer = new Timer();
TimerTask mGetLastKnownLocationTask = new GetLastKnownLocationTask();
timer.schedule(mGetLastKnownLocationTask, 0, 60000);
}
private class GetLastKnownLocationTask extends TimerTask {
public void run() {
Location mLocation =
mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// Do something with mLocation
}
}
...
}
대
...
@Override
public void onCreate() {
Timer timer = new Timer();
TimerTask mGetLastKnownLocationTask = new GetLastKnownLocationTask();
timer.schedule(mGetLastKnownLocationTask, 0, 60000);
}
private class GetLastKnownLocationTask extends TimerTask {
public void run() {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location mLocation =
mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// Do something with mLocation
}
}
참고 : 코드에서 나는 활성 GPS를 유지하는 LocationListener를 필요로하지 않습니다. 이는 별도의 서비스로 응용 프로그램의 다른 부분에서 처리됩니다. 여기서는 고정 된 간격으로 가장 최근에 알려진 위치 만 확인하려고합니다.
감사합니다,하지만 몇 가지 내가 getLastKnownLocation를 사용하고 이유() 대신 LocationListener이있다. 첫 번째는 GPS를 사용할 수 있는지 여부에 관계없이 업데이트가 실행되도록하려는 것입니다. 예를 들어, 사용자가 잠시 실내에 있다면, 나는 그/그녀를위한 최상의 위치가 getLastKnownLocation()으로 얻은 것이라고 가정합니다. getLastKnownLocation()을 반복적으로 사용해서는 안되는 기술적 인 이유가 있습니까? 아니면이 방식으로 사용하지 않기를 바란다는 인상입니까? – robguinness