Будет ли AlarmManager работать, если мое приложение не запущено?
У меня есть сигнал, который работает нормально, если я взаимодействую (использую) с моим приложением, но он не работает, если я установил его на следующий день и не взаимодействую с моим приложением. Поэтому я сомневаюсь, что это потому, что процесс моего приложения не запущен в это время.
вот что я делаю
Calendar calSet = Calendar.getInstance();
calSet.set(Calendar.HOUR_OF_DAY, selectedhour);
calSet.set(Calendar.MINUTE, selectedminute);
calSet.set(Calendar.YEAR, year);
calSet.set(Calendar.MONTH, monthOfYear);
calSet.set(Calendar.DATE, dayOfMonth);
alarm = new Intent(ActivityA.this, Service.class);
pendingIntent = PendingIntent.getService(getApplicationContext(), i++,alarm, 1);
alarmanager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),pendingIntent);
4 ответа
Из AlarmManager
AlarmManager обеспечивает доступ к системным службам сигнализации. Это позволяет запланировать запуск вашего приложения в будущем. Когда срабатывает сигнал тревоги, зарегистрированное для него намерение транслируется системой, автоматически запуская целевое приложение, если оно еще не запущено. Зарегистрированные сигналы тревоги сохраняются, пока устройство находится в спящем режиме (и могут при желании пробудить устройство, если они выключаются в течение этого времени), но будут сброшены, если оно выключено и перезагружено.
Проще говоря, он будет работать, пока ваше устройство не будет перезагружено.
Вы можете прочитать Android AlarmManager после перезагрузки, где @CommonsWare была предоставлена ссылка на его пример приложения, в котором сохраняется тревога даже после перезагрузки устройства.
Пожалуйста, не обращайте внимания на нижеследующий раздел, он кажется недействительным. Я буду удалять в будущем
Подробнее об уничтожении приложений вы можете прочитать в разделе Как создать постоянный AlarmManager и Как сохранить тревогу после закрытия приложения? может дать вам представление о том, как справиться с такой проблемой (чтобы сохранить тревогу, если приложение было убито).
Да, это сработало, но правильное понимание см. Док.
Примечание. Диспетчер тревог предназначен для случаев, когда вы хотите, чтобы код вашего приложения запускался в определенное время, даже если ваше приложение в данный момент не запущено. Для обычных операций синхронизации (тики, тайм-ауты и т. Д.) Проще и намного эффективнее использовать Handler.
посмотрите здесь http://developer.android.com/reference/android/app/AlarmManager.html
Глядя на документацию по AlarmManager.
http://developer.android.com/reference/android/app/AlarmManager.html
Я не вижу нигде, где говорится, что уничтожение вашего приложения удалит все тревоги, запланированные этим приложением. Более конкретно, в нем говорится, что если ваше приложение не запущено, оно запустит его для вас.
Я сделал свое собственное тестирование и могу подтвердить это..
- Установка будильника через 5 секунд в будущем.
- Затем закрытие приложения из последних.
- Затем смотрю логи моей трансляции.
Помня, что это было сделано с подписанным apk.
Calendar cal = Calendar.getInstance(); cal.add(Calendar.MILLISECOND, 5000); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
Я бы также помнил, что Панкадж Кумар говорил о перезапуске будильника. Это единственное место, которое вам нужно прикрыть, так как AlarmManager сбрасывает все тревоги при перезапуске устройства.
Нам нужно включить наше приложение в диспетчере автозапуска в диспетчере приложений, некоторые телефоны, такие как Vivo v5,
В Vivo v5 мы можем найти это меню в
iManager > App Manager > Auto Start Manager > Enable our app here.
Тогда ваш менеджер будильника / будильника сработает, если приложение будет убито или закрыто.