Оптимальный выбор между Service и AlarmManadger

Ответить
LACOSTE
Сообщения: 10
Зарегистрирован: 30 янв 2014, 09:50

Оптимальный выбор между Service и AlarmManadger

Сообщение LACOSTE » 16 фев 2015, 17:35

Всем привет!)
Постараюсь максимально коротко и понятно описать суть вопроса.
Есть электронное расписание нашего колледжа, есть сервер где все эти данные хранятся, так же есть мобильное приложение позволяющее просматривать расписание загружаемое с сервера.
Возникла потребность реализовать автообновление в приложении, т.к. расписание обновляется раз в сутки и правки могут вноситься в любой момент.
Пробовал работать и с Service и с AlarmManadger, у каждого на мой взгляд есть подводные камни.
Сервис очень часто висит в процессах с надписью "Перезапуск", после того как пользователь очистил историю открытых приложений или врубил очистку Clean Master`om и так может провисеть не перезапустившись по нескольку часов, а хотя если система сама очистит ОЗУ для запуска тяжелых приложений, то процесс спокойно восстанавливается.
Теперь AlarmManadger, штука конечно хорошая, выполняется ровно с той периодичностью которая нужна, но правда не на всех аппаратах работает корректно когда устройство во сне.
Не могу определиться с выбором конкретно для данной задачи с автообновлением.
Просто если у вас есть практика в таких вопросах, поделитесь пожалуйста как вы организовываете обновления в фоне, с какой периодичностью лучше это делать и что для этого использовать.
Либо подскажите где можно что то почитать по этому поводу..
Заранее спасибо огромнейшее!)))

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Оптимальный выбор между Service и AlarmManadger

Сообщение Fry » 25 фев 2015, 17:28

А что у вас Service без будильника делает? Тупо висит в памяти и раз в сутки дергает удаленный сервис? Если так, то это, конечно, не правильно и не рационально.

У меня недавно была похожая задача, сделал так.
1. Обращение к серверу происходит через intentService. Просто реализуется, из коробки отдельный поток, автостопиться после завершения работы.

2. Создается будильник, который по нужному расписанию запускает сетевой intentService. Будильник устанавливается (или переустанавливается) каждый раз при запуске приложения.

3. Создается бродкаст ресивер, который автостартится каждый раз при перезагрузке системы. Он также выставляет тот же самый будильник с тем же настройками.

В итоге, получаем по расписанию работающий сервис, который делает только то что нужно, и отключаются.
Будильники переустанавливаются каждый раз при перезагрузки + на всякий случай при каждом запуске приложения. Перестраховка, так как будильники могут слетать.
Arbeit macht Fry

LACOSTE
Сообщения: 10
Зарегистрирован: 30 янв 2014, 09:50

Re: Оптимальный выбор между Service и AlarmManadger

Сообщение LACOSTE » 28 фев 2015, 16:36

Fry писал(а):А что у вас Service без будильника делает? Тупо висит в памяти и раз в сутки дергает удаленный сервис? Если так, то это, конечно, не правильно и не рационально.

У меня недавно была похожая задача, сделал так.
1. Обращение к серверу происходит через intentService. Просто реализуется, из коробки отдельный поток, автостопиться после завершения работы.

2. Создается будильник, который по нужному расписанию запускает сетевой intentService. Будильник устанавливается (или переустанавливается) каждый раз при запуске приложения.

3. Создается бродкаст ресивер, который автостартится каждый раз при перезагрузке системы. Он также выставляет тот же самый будильник с тем же настройками.

В итоге, получаем по расписанию работающий сервис, который делает только то что нужно, и отключаются.
Будильники переустанавливаются каждый раз при перезагрузки + на всякий случай при каждом запуске приложения. Перестраховка, так как будильники могут слетать.
Спасибо огромное за ответ! Изначально у меня была пара Service + Handler. Но потом изучил тему более подробно, перечитал примеры разных кодов и реализовал схему работы автообновления схожую с Вашей Intent Service + AlarmManager.
Теперь прочитал это сообщение и уверен что сделал все правильно)

Ответить