Служба не будет убита, несмотря ни на что
-
22-12-2019 - |
Вопрос
У меня довольно любопытная проблема.У меня есть несвязанная служба, которую я вызываю, используя приведенный ниже код из моего основного действия, когда приложение открывается.
//some code checks if the service is awake. if not then the code below is called
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class);
startService(serviceIntent);
Когда приходит новое SMS-сообщение, Служба ожидает 3 секунды с помощью таймера, чтобы убедиться, что наблюдатель контента сохранил данные во внутренней базе данных SMS.после этого он вызывает службу намерений, чтобы выполнить тяжелую работу.
По неизвестным причинам Служба иногда зависает и застревает при «перезапуске (см. изображение)».
Любопытно то, что даже попытка принудительной остановки службы в разделе приложений не работает.Он на мгновение исчезает, а затем появляется снова с тем же сообщением.использование stopService в коде также не работает, и метод OnDestroy внутри службы никогда не вызывается.Единственный выход – перезагрузить телефон.
Проблема в том, что в этом состоянии он не работает (он предназначен для анализа входящих SMS-сообщений).
Я запускаю это на Galaxy Note 3 с Android 4.3.
""
Я подозреваю, что Intentservice, выполняющий фактический анализ, не завершается, и поэтому вызов службы для остановки никогда не вызывается.
Мой вопрос: есть ли способ заставить зависшую службу намерений остановиться?
это код в StartCommand в сервисе
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (!blnAutoSyncisEnabled) {
stopSelf();
return 0;
} else {
return START_STICKY;
}
}
более подробный обзор того же вопроса здесь https://stackoverflow.com/posts/21077517/edit
Решение
Возможно, это не очень элегантное решение, но вы можете позвонить stopSelf()
прямо в сервисе onCreate()
метод и обрабатывать фактическое действие в нем onDestroy()
перед звонком super.onDestroy()
.
У меня была похожая проблема, которую я решил таким образом.Возможно, это решит и вашу проблему.Удачи.;)