Как сохранить фоновый сервис GPS в живых - PullRequest
1 голос
/ 08 октября 2011

Я пытаюсь использовать фоновый прослушиватель местоположения в качестве службы, которая может использоваться всеми действиями в моем приложении. Он также должен сканировать места, пока я не "убью" его. Однако я понял, что через пару часов служба gps убита, и я больше не могу найти места.

Как сохранить этот сервис живым (по крайней мере, locationManager и слушатель местоположения), пока я не отключу его?

Спасибо

public class GPS extends IntentService {
    public static LocationListener loc_listener = null;
    public static LocationManager locationManager = null;

    public GPS() {
        super("GPS");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (loc_listener == null) {
            loc_listener = new LocationListener() {

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub

                }
            };
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, loc_listener);
    }

    public static void killGPS() {
        if (locationManager != null && loc_listener != null) {
            locationManager.removeUpdates(loc_listener);
        }
    }

}

1 Ответ

2 голосов
/ 08 октября 2011

Однако я понял, что через пару часов служба GPS убита, и я больше не могу найти места.

Во-первых, это исключительно плохая идея - постоянно держать GPS включенным, так как срок службы батареи пользователя сильно пострадает. Ваше приложение должно предлагать огромную ценность (например, Google Navigation), чтобы оправдать эту стоимость электроэнергии.

Во-вторых, никогда не регистрируйте слушателя из IntentService. Как только onHandleIntent() заканчивается, служба закрывается ... но вы пропускаете зарегистрированного слушателя. Это эффективно поддерживает фоновый поток. Однако, поскольку у вас нет активных компонентов, Android в конечном итоге завершит ваш процесс.

...