2010-01-28 6 views
3

У меня возникли вопросы относительно LocationListener в моей службе под названием myService.Почему мой LocationListener стал нулевым?

Вот мой код:

///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) 

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

+0

Вы вручную устанавливаете его для нулевого кода в коде? – JRL

+0

Я уверен, что не устанавливаю его в null. Я думаю, что сервис перезагружен, но я не понимаю, какая часть кода он запускается, когда служба перезапускает. – sheik

ответ

0

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

+0

спасибо за ан. пожалуйста, сообщите, какие могут быть причины/причины перезагрузки службы. – sheik

1

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