2010-09-23 5 views
0

У меня есть простое приложение, которое использует системный сервис Android LOCATION_SERVICE. При закрытии приложения мне нужно, чтобы служба остановилась. Я долго искал, как это сделать, но я не должен искать правильные вещи. Кто-нибудь знает, как остановить эту услугу?Не удается остановить LOCATION_SERVICE

Вот что я делаю.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    private LocationManager lm; 
    private LocationListener locationListener; 

    lm = (LocationManager) 
     getSystemService(Context.LOCATION_SERVICE);  

    locationListener = new MyLocationListener(); 

    lm.requestLocationUpdates(
     LocationManager.GPS_PROVIDER, 
     0, 
     0, 
     locationListener); 

    ... 
} 

@Override 
protected void onDestroy() { 
    lm.removeUpdates(locationListener); 
    super.onDestroy(); 
} 

В классе LocationManager отсутствуют методы остановки службы. Вот где я думал, что вы сможете закрыть или остановить его.

Спасибо за любую помощь.

+0

Вы уверены, что 'onDestroy()' вызывается? Если вы просто выходите из приложения с помощью кнопки home/back, скорее всего, это не так. Смотрите: http://developer.android.com/reference/android/app/Activity.html – eldarerathis

+0

Чтобы добавить к сказанному eldarerathis, вы, вероятно, захотите начать и остановить сбор в onStart и onStop, или onPause и onResume, чтобы он останавливался когда вы идете в фоновый режим. –

+0

Это просто один из многих способов, которые я пробовал. Я также попробовал onBackPressed(), который выполняет. Но это не моя проблема. Я просто хочу закрыть службу определения местоположения. – jonsinfinity

ответ

0

Вы должны называть функцию finish() в функции onBackPressed(), чтобы закрыть приложение. Затем нужно позвонить в onDestroy.

Нет необходимости останавливать службу определения местоположения (предположим, вы говорите о GPS). GPS не будет использоваться, если приложение не прослушивает его, поэтому не потребляйте никакой мощности или батареи ЦП.

+0

Да, я пробовал все это. приложение все еще работает даже после того, как я вернулся из приложения. Знаете ли вы, как я могу убедиться, что приложение действительно закрывается, когда я отступаю? – jonsinfinity

0

Я думаю, вы должны удалить @Override. Я протестировал это и получил ту же проблему. И с @Override мое приложение вылетает.

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

link text

Я пытаюсь сделать то же самое, как вы и я использовал onResume и OnPause, чтобы активировать и деактивировать LocationUpdates.

Смежные вопросы