2014-01-16 4 views
1

Наконец-то у меня все работает хорошо. Они генерируют события и трансляцию с использованием менеджеров. Моя получающая деятельность даже хорошо принимает трансляции. Однако у меня есть одна проблема. У меня есть две службы. Когда я вызываю onDestroy(), только один из них останавливается. Другой продолжает транслировать. Он также продолжает прослушивать изменения. Это сервис LightSensor, который контролирует события Lux. В моей Приемной деятельности, когда я звонюСервис, который просто не умрет

stopService(new Intent(this, LightSensor.class)); 

OnDestroy фактически срабатывает. Я знаю это, потому что у меня есть событие Log.d, чтобы показать, что он был уволен, но он не умирает. SensorListener разрешается отменять регистрацию, и Служба будет остановлена, но даже после выхода из приложения она получает от LightSensor.

Может кто-нибудь взглянуть и посмотреть, почему эта служба не умрет plesae?

LightSensor

@Override 
    public void onDestroy() { 
     Log.d(TAG, "OnDestroy"); 
     stopSelf(); 
     mSensorManager.unregisterListener(this, LightSensor); 
     super.onDestroy(); 
    } 
+0

Вы проверили, вызван ли super.onDestroy()? есть вероятность, что unregisterListener не работает – Androidme

+0

Строка 3 показывает в LogCat, поэтому я предполагаю, что вызывается onDestroy. Было бы разумно, что unreg терпит неудачу и объяснит проблему. Интересно, положил ли я еще один log.d после него, если это даст мне некоторые подсказки ..... –

+0

ОК, это может быть немой, но я добавил Log.d после каждой строки, чтобы посмотреть, увольняются ли они. Я вижу запись журнала полностью после super.onDestroy. Если бы Unreg терпел неудачу, не остановился бы он или что-то еще? –

ответ

2

Избавьтесь от stopSelf() в onDestroy(), так как он не нужен и может быть вредным.

Кроме того, вам необходимо убедиться, что экземпляр слушателя, который вы передаете в unregisterListener(), является тем же самым экземпляром слушателя, который использовался с registerListener().

+0

// Тест, чтобы увидеть, если Light Sensor доступен \t \t если (LightSensor! = NULL) { \t \t \t mSensorManager.registerListener (это, LightSensor, \t \t \t \t \t SensorManager.SENSOR_DELAY_NORMAL); \t \t} –

+0

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

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