Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
1

Принцип работы Service

11.03.2016, 21:37. Показов 964. Ответов 9

Author24 — интернет-сервис помощи студентам
Здравствуйте, господа.
Не могу понять, что еще может Service, кроме перегружаемых методов? При первом запуске в onStartService или onStartCommand можно писать что угодно, но оно сработает только при старте или перезагрузке сервиса.
Использование в сервисе Timer или AlarmManager или AsyncTask не точная. Например, при загруженности телефона эти методы срабатывают с задержкой.

Да и вообще, нужен ли Service при использовнии AlarmManager? При моем тесте, без использования сервиса и закрытия приложения (System.Exit(0)), AlarmManager писал логи в заданное время с заданой последовательностью... Ну а при загруженности телефона, с задержкой.

На данный момент интересует фоновое выполнение куска кода строго-настрого в точные минуты и секунды, с точным интервалом, как это делает стоковый будильник. Или следует проверять каждую секунду? И нужен ли для этого Service?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2016, 21:37
Ответы с готовыми решениями:

Принцип работы приложения
Привет всем!) Нужна помощь знатоков форумчан. Хотел бы спросить принцип работы следующего вида...

Принцип работы RecyclerView
Можете объяснить принципп работы RecyclerView во время скроллинга? Как он заполняется элементами?...

Объясните принцип работы Canvas в классе SurfaceView
Добрый день, форумчане. У меня возникла проблема в реализации простой задачи. она состоит в...

Более подробный принцип работы Сервиса Android
Здравствуйте всем, я хочу понять, как работает Сервис Android более подробно, то о чем не...

9
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,379
12.03.2016, 10:44 2
Сервис можно поднять снаружи приложения + если система при высокой загрузке подвинет сервис она поднимет его обратно как только сможет (забитое приложение обратно не поднимется). Создайте в сервисе поток и делайте то что нужно если аларм не устраивает
0
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
12.03.2016, 15:47  [ТС] 3
Цитата Сообщение от vxg Посмотреть сообщение
Сервис можно поднять снаружи приложения
Что вы имеете ввиду?

Цитата Сообщение от vxg Посмотреть сообщение
Создайте в сервисе поток и делайте то что нужно если аларм не устраивает
Вы имеете ввиду "следует проверять каждую секунду?" - а не будет большой нагрузки на систему?

И что насчет AlarmManager без использования Service?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
12.03.2016, 16:41 4
Цитата Сообщение от Dark-VIN Посмотреть сообщение
Вы имеете ввиду "следует проверять каждую секунду?"
Я ещё в этом не разбираюсь, но такие вопросы возникают здесь регулярно. Каждую секунду - это жесть, батарейка сядет быстро, а загрузка ЦП сильно подскочит.
0
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
12.03.2016, 19:20  [ТС] 5
Цитата Сообщение от CoolMind Посмотреть сообщение
такие вопросы возникают здесь регулярно
Такое впечатление, что это великий секрет, как написать неубиваемый сервис и создать точный "будильник".

На примере Hourly chime могу сказать, что в этом приложении используется AlarmManager. При ручной смене времени, будильник срабатывает небедленно, как написано в описании класса AlarmManager. Приложение имеет два сервиса и один ресивер.

Но стоковый будильник работает по другому. А вот как... Не может же он ежесекундно сверять время.

На моем HTC One X+ под Android 4.1.2 стоковый будильник содержит следующее:
...

Receivers:
com.htc.android.worldclock.worldclock.WorldClockReceiver
com.htc.android.worldclock.alarmclock.AlarmReceiver
com.htc.android.worldclock.stopwatch.StopwatchReceiver
com.htc.android.worldclock.timer.TimerReceiver

Services:
com.htc.android.worldclock.worldclock.WorldClockService
com.htc.android.worldclock.alarmclock.AlarmService
com.htc.android.worldclock.alarmclock.AlarmHfmService
com.htc.android.worldclock.stopwatch.StopwatchService
com.htc.android.worldclock.timer.TimerService

есть еще Providers и Activity, но они не актуальны в данной теме.

0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,379
13.03.2016, 08:21 6
Поднять снаружи означает что если сервис определенным образом оформлен то его можно запускать при необходимости из другого приложения. Нужно ли сверять время каждую секунду - я не знаю специфику вашего приложения. Без использования сервиса у вас нет гарантии того что ваше приложение однажды не прекратит свою работу и не потребует ручного повторного запуска.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
14.03.2016, 12:30 7
Dark-VIN, волею судеб заинтересовался данной темой.
Нашёл, что эти все методы неточны. Из темы http://stackoverflow.com/quest... mmatically увидел ссылку на http://binarybuffer.com/2012/0... in-android, где объясняется, что во сне Андроид не хочет петь и танцевать, если использовать postDelayed с потоком или службой. Читая дальше, обнаружил, что и многие другие методы не работают во сне. Например, http://stackoverflow.com/quest... torservice.
Проблема в том, что устройство разбудить по событию, я так понимаю, может AlarmManager через BroadcastReceiver. Остальные не будят.

Добавлено через 15 минут
Я так подумал, если в некоторых статьях рекомендуют использовать ScheduledExecutorService вместо Timer и прочих однополчан, то можно попытаться совмещать его с AlarmManager. Конечно, это усложнит код и повысит нагрузку на процессор, но зато приведёт к нужной точности. Т.е. пока устройство не во сне, использовать ScheduledExecutorService (тут надо не выполнять повторно действия в AlarmManager), а как только оно во сне, ориентироваться на AlarmManager.
0
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
15.03.2016, 00:55  [ТС] 8
Цитата Сообщение от vxg Посмотреть сообщение
если сервис определенным образом оформлен то его можно запускать при необходимости из другого приложения.
Думаю можно. Я запускаю сервис startService(new Intent("d.swan.vki.Service"));

Цитата Сообщение от vxg Посмотреть сообщение
Нужно ли сверять время каждую секунду - я не знаю специфику вашего приложения.
Приложение просто отправляет на сервер запрос и ждет ответа каждые 5 минут, до тех пор пока пользователь вручную не выключит сервис. Если запрос приходит не вовремя, сервер может отбросить запрос.


CoolMind, спасибо! Более менее понятно.
Не понятно, как AlarmManager общается с системой...
Может дать приложению user-permission WAKE_LOCK...

Нашел одно из решений на русском stackoverflow ( блóчится). Буду пробовать гонять телефон по тяжелым приложениям и смотреть логи. Попробую использовать как AlarmManager, так и AsyncTask... Так же и в режиме сна...

Скажите, куда лучше помещать вызовы, в onCreate или onStartCommand?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
15.03.2016, 10:15 9
Цитата Сообщение от Dark-VIN Посмотреть сообщение
Может дать приложению user-permission WAKE_LOCK...
Где-то там же написано, что это не поможет, т.к. пользователь может вручную отключить дисплей.
AlarmManager общается через BroadcastReceiver. Т.е. надо прописывать события onReceive.
0
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
17.03.2016, 14:08  [ТС] 10
Цитата Сообщение от CoolMind Посмотреть сообщение
AlarmManager общается через BroadcastReceiver. Т.е. надо прописывать события onReceive.
Нет, нет. Я имел ввиду на низком уровне. Как формируется в системе.
0
17.03.2016, 14:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 14:08
Помогаю со студенческими работами здесь

Cобытийность. Принцип использования и принцип работы событий в jQ и GCT
Добрый день. Подготавливаюсь к собеседованию по чеклисту и не могу найти ответ на вопрос:...

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service.
Не знаю что делать дальше

Принцип работы
ЗДравствуйте, первый вопрос по поводу выпадающего списка - его можно создать только через...

Принцип работы ОУ в DC-DC
Подскажите как работает нижний по схеме ОУ. А то не как не пойму. Светодиоды по моему вообще...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru