#android #service #alarm
#Android #Обслуживание #тревога
Вопрос:
У меня есть приложение с рабочим процессом, который вызывает множество действий, некоторые из них он завершает, а другие оставляют активными по мере прохождения пользователем. НО я не могу отключить свою службу сигнализации, которая продолжается даже при нажатии кнопки «Домой» и завершении работы приложения.
О, конечно — принудительное закрытие в настройках очень хорошо остановит службу сигнализации (это единственный способ ее отключить). Я не могу остановить оповещение из моего приложения, поскольку ничто не сообщает мне, когда приложение было закрыто.
Ни один из методов жизненного цикла onDestroy () или on Stop () не работает, потому что кнопка home может быть активирована во время любого из 15 действий, а onDestroy() не вызывается в течение длительного времени после выполнения какого-либо действия.
Ответ №1:
НО я не могу отключить свою службу сигнализации, которая продолжается даже при нажатии кнопки «Домой» и завершении работы приложения.
Тогда не регистрируйте тревогу. AlarmManager
предназначен для периодического выполнения вашего кода, когда он еще не запущен. Для чего-то, относящегося исключительно к действию, используйте postDelayed()
.
Ответ №2:
Когда вы нажимаете кнопку «Домой», ваше приложение не завершает работу — и не должно завершаться. Оно «заморожено» вызовом onSaveInstanceState(Bundle)
. Если вы нажмете на значок своего приложения, оно будет перезапущено и возобновлено точно так же, как если бы в системных часах была огромная пауза (или, если оно было отключено системой, воссоздано из пакета, который вы установили в onSaveInstanceState
). Обычно вы включаете функцию приостановки или отмены действий, связанных со временем, в onPause
, потому что в некотором смысле время для вашего приложения останавливается в этот момент.
Для чего вы используете сигналы тревоги, чтобы их нужно было останавливать при выходе из приложения? Я думал, что весь смысл их в том, чтобы вызвать что-то в вашем приложении в определенное время, даже если оно не запущено.
Ответ №3:
Просто сделайте вот так….
AlarmManager alarm;
PendingIntent pintent;
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
Intent intent = new Intent(this, TestService.class);
pintent = PendingIntent.getService(this, 0, intent, 0);
alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int i;
i=30;
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), i* 1000, pintent);
System.out.println("service going to start-----------");
startService(new Intent(getBaseContext(), TestService.class)); // Here start your service
Если вы хотите остановить свою службу, это означает, что вы должны остановить свою службу сигнализации один раз. В методе onBackPressed () кнопка ok будет означать завершение вашей деятельности. Внутри этой кнопки вы должны добавить следующий код.
alarm.cancel(pintent);
Это остановит вашу службу добавления оповещения при выходе из вашего приложения. Всего наилучшего.