Расписание для Сервиса
Расписание для Сервиса
Сервис запустился. Скажем, через два часа, он должен выполнить действие, после чего впасть в спячку еще на три часа, потом опять выполнить действия и т.д.
Вопросы:
1. Что в данном случае подразумевается под спячкой? Что каждую милисекунду сервис будет сверять время, пока не получит нужное значение? Или это как-то по-другому делается?
2. Собственно - как это реализовать? Через sleep? Или есть какие-нить спецкоманды для сервиса?
Вопросы:
1. Что в данном случае подразумевается под спячкой? Что каждую милисекунду сервис будет сверять время, пока не получит нужное значение? Или это как-то по-другому делается?
2. Собственно - как это реализовать? Через sleep? Или есть какие-нить спецкоманды для сервиса?
Re: Расписание для Сервиса
Смотри в сторону AlarmManager.
Re: Расписание для Сервиса
Не, я хочу использовать NotificationManager
Re: Расписание для Сервиса
Улыбнуло, разговор о собаках, а ты мне про кота =).
AlarmManager - используется для вызова сервиса по расписанию.
NotificationManager - это просто сервис управления уведомлениями для пользователя.
Sleep не имеет смысла использовать в своем сервисе, помни, что твой сервис может система в любой момент прибить, даже без выполнения метода onDestroy, а потом, при появлении памяти, заново создать.
П.С. Сам недавно сталкивался с таким, пришлось отправить сервис в foreground и теперь думаю, как от иконки избавиться в области уведомлений.
AlarmManager - используется для вызова сервиса по расписанию.
NotificationManager - это просто сервис управления уведомлениями для пользователя.
Sleep не имеет смысла использовать в своем сервисе, помни, что твой сервис может система в любой момент прибить, даже без выполнения метода onDestroy, а потом, при появлении памяти, заново создать.
П.С. Сам недавно сталкивался с таким, пришлось отправить сервис в foreground и теперь думаю, как от иконки избавиться в области уведомлений.
Re: Расписание для Сервиса
Можешь дать код сервиса с алармом+нотифик?
Re: Расписание для Сервиса
viewtopic.php?f=39&t=1089&p=3799&hilit= ... ager#p3799powercat писал(а):Можешь дать код сервиса с алармом+нотифик?
Re: Расписание для Сервиса
хм...вот как я понял действо
в сервисе создается АлармМанагер, которому устанавливается (Тип срабатывания, Время срабатывания, Пендинг). Еще можно добавить интревал.
Все, что после него - должно выполняться ПОСЛЕ установленного в манагере времени, правильно? Т.е. если задать еще и интервал, то действие будет происходить циклически?
Пробую сделать, вот такой код:
Активити закрывается, сервис запускается и тост вылезает. НО - без задержки!
Пробовал задержку добавить в календар, вот так:
Все равно задержки нет....в чем косяк? Может в эклипсе? Или в моем генетическом коде? )))
в сервисе создается АлармМанагер, которому устанавливается (Тип срабатывания, Время срабатывания, Пендинг). Еще можно добавить интревал.
Все, что после него - должно выполняться ПОСЛЕ установленного в манагере времени, правильно? Т.е. если задать еще и интервал, то действие будет происходить циклически?
Пробую сделать, вот такой код:
Код: Выделить всё
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis()); //Непонятно, зачем эта строка...вроде выше уже это получили, но не особо важно
PendingIntent pi=PendingIntent.getService(this, 0, null, 0);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()+5000, pi);
Toast.makeText(this, "dgjd;kjg;kdjg;", Toast.LENGTH_SHORT).show();Пробовал задержку добавить в календар, вот так:
Код: Выделить всё
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MILLISECOND, 5000);
PendingIntent pi=PendingIntent.getService(this, 0, null, 0);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
Toast.makeText(this, "dgjd;kjg;kdjg;", Toast.LENGTH_SHORT).show();Re: Расписание для Сервиса
А тост у тебя в том же методе, где ты настраиваешь и AlarmManager?
Re: Расписание для Сервиса
Да.
Похоже, что периодичность, как и отложенность, верны для pi...а не для кода, который идет за АлармМанагером
Похоже, что периодичность, как и отложенность, верны для pi...а не для кода, который идет за АлармМанагером
Re: Расписание для Сервиса
Когда ты назначаешь АлармМенеджер, то на этом метод не останавливается, разнеси в разные методы свой тост и назначение аларм менеджера. Менеджер в onCreate, а тост тебе необходимо в OnStartCommand.
Re: Расписание для Сервиса
Значит так - тост нормально отрабатывает, если через пендинг задать ресивер, который будет собственно отображением заниматься. При этом не получается в него засунуть Нотификейшн, т.к. похоже, что он не работает из под бродкаста. Поэтому проблема с периодичностью выдачи Нотификейшна была решена юзанием Таймера и ТаймерТаска - данкс Резаку )))
Осталось озадачить ситему тем, чтобы она не убивала сервис при нехватке памяти, где-то видел, как это делается, буду копать
Осталось озадачить ситему тем, чтобы она не убивала сервис при нехватке памяти, где-то видел, как это делается, буду копать
Re: Расписание для Сервиса
Копай в сторону foreground
Re: Расписание для Сервиса
Ага, седня буду рыцца )
Re: Расписание для Сервиса
вот еще вопрос возник - Notifications - они разве не должны копиться в очереди на просмотр? Я поставил их выдачу каждые 10 секунд. Жду минуту. По идее должны были 6 штук вылезти, но после открытия того, чья иконка отображается в баре - остальных пяти там не наблюдается.