Как сохранить поток IntentService живым?

Я пишу тестовое приложение, которое отслеживает местоположение пользователей. Идея состоит в том, что я могу запустить службу, которая затем регистрируется для обновления местоположения. На данный момент я использую для этого IntentService.

Сервисный код (который не работает... )выглядит так:

public class GpsGatheringService extends IntentService {

// vars
private static final String TAG = "GpsGatheringService";
private boolean stopThread;

// constructors
public GpsGatheringService() {
    super("GpsGatheringServiceThread");
    stopThread = false;
}

// methods
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand()");
    return super.onStartCommand(intent, flags, startId);
}

@Override
protected void onHandleIntent(Intent arg0) {
    // this is running in a dedicated thread
    Log.d(TAG, "onHandleIntent()");
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener() {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.d(TAG, "onStatusChanged()");
        }

        @Override
        public void onProviderEnabled(String provider) {
            Log.d(TAG, "onProviderEnabled()");
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.d(TAG, "onProviderDisabled()");
        }

        @Override
        public void onLocationChanged(Location location) {
            Log.d(TAG, "onLocationChanged()");
        }
    };
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

    while (!stopThread) {
        try {
            Log.d(TAG, "Going to sleep...");
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy()");
    stopThread = true;
}

}

В настоящее время единственное, что происходит, это вывод "Иду спать...". Мне нужен какой-то механизм, который поддерживает поток (, потому что в противном случае слушатель больше недоступен для обновления статуса )и не тратит время процессора (. Я думаю, что зацикливание занятости не является предпочтительным способом ). Даже если есть масса других способов реализации поведения приложения (регистрация GPS-координат )Меня интересует решение этого способа, чтобы изучить технику решения проблем такого рода!

5
задан fliX 28 July 2012 в 10:40
поделиться