Почему мой LocationListener становится нулевым? - PullRequest
3 голосов
/ 28 января 2010

У меня возникли проблемы, связанные с LocationListener в моем Сервисе под названием myService.

Вот мой код:

///onStart method ..
onStart() {
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE)
    .
    .
    provider = locationManager.getBestProvider(criteria, true);
    locationListener = (LocationListener) new MyLocationListener();
    locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
}

В моей Активности есть кнопка, которая должна остановить сервис. По нажатию кнопки я делаю:

stopService(new Intent(getApplicationContext(), myService.class)

В файле myService.java у меня есть:

////onDestroy method....
onDestroy() {
    locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.removeUpdates(locationListener); //Getting **exception here ....
}

Я получаю следующее исключение:

java.lang.IllegalArgumentException: listener==null at android.location.LocationManager.removeUpdates(LocationManager.java:799) at 
<.package_name>myService.onDestroy(myService.java:407) 

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

Ответы [ 2 ]

1 голос
/ 19 декабря 2012

Система Android принудительно останавливает службу только при нехватке памяти и должна восстанавливать системные ресурсы для действия, ориентированного на пользователя. Если служба связана с действием, ориентированным на пользователя, вероятность того, что она будет уничтожена, будет меньше, а если заявлено, что служба работает на переднем плане (обсуждается позже), она почти никогда не будет уничтожена. В противном случае, если служба была запущена и работает долго, то система со временем опустит свою позицию в списке фоновых задач, и служба станет очень восприимчивой к уничтожению - если ваша служба запущена, вы должны разработать ее так, чтобы изящно обрабатывает перезапуски системой. Если система убивает вашу службу, она перезапускает ее, как только ресурсы снова становятся доступными (хотя это также зависит от значения, которое вы возвращаете из onStartCommand (), как будет обсуждаться позже). Дополнительные сведения о том, когда система может уничтожить службу, см. В документе «Процессы и потоки».

0 голосов
/ 28 января 2010

Я мог бы быть здесь, но, кажется, возможно, ваша Служба была убита, а затем (позже) перезапущенаПочему бы не переместить вещи для создания экземпляров в onCreate()?

...