Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
#1

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

11.03.2016, 21:37. Просмотров 514. Ответов 9

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

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

На данный момент интересует фоновое выполнение куска кода строго-настрого в точные минуты и секунды, с точным интервалом, как это делает стоковый будильник. Или следует проверять каждую секунду? И нужен ли для этого Service?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2016, 21:37
Ответы с готовыми решениями:

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

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

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

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

Service
Как создать приложение как Service?

9
vxg
Модератор
3247 / 2048 / 322
Регистрация: 13.01.2012
Сообщений: 7,930
12.03.2016, 10:44 #2
Сервис можно поднять снаружи приложения + если система при высокой загрузке подвинет сервис она поднимет его обратно как только сможет (забитое приложение обратно не поднимется). Создайте в сервисе поток и делайте то что нужно если аларм не устраивает
0
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
12.03.2016, 15:47  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
Сервис можно поднять снаружи приложения
Что вы имеете ввиду?

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

И что насчет AlarmManager без использования Service?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
12.03.2016, 16:41 #4
Цитата Сообщение от Dark-VIN Посмотреть сообщение
Вы имеете ввиду "следует проверять каждую секунду?"
Я ещё в этом не разбираюсь, но такие вопросы возникают здесь регулярно. Каждую секунду - это жесть, батарейка сядет быстро, а загрузка ЦП сильно подскочит.
0
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
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
vxg
Модератор
3247 / 2048 / 322
Регистрация: 13.01.2012
Сообщений: 7,930
13.03.2016, 08:21 #6
Поднять снаружи означает что если сервис определенным образом оформлен то его можно запускать при необходимости из другого приложения. Нужно ли сверять время каждую секунду - я не знаю специфику вашего приложения. Без использования сервиса у вас нет гарантии того что ваше приложение однажды не прекратит свою работу и не потребует ручного повторного запуска.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
14.03.2016, 12:30 #7
Dark-VIN, волею судеб заинтересовался данной темой.
Нашёл, что эти все методы неточны. Из темы http://stackoverflow.com/questions/2...ogrammatically увидел ссылку на http://binarybuffer.com/2012/07/exec...sks-in-android, где объясняется, что во сне Андроид не хочет петь и танцевать, если использовать postDelayed с потоком или службой. Читая дальше, обнаружил, что и многие другие методы не работают во сне. Например, http://stackoverflow.com/questions/6...xecutorservice.
Проблема в том, что устройство разбудить по событию, я так понимаю, может AlarmManager через BroadcastReceiver. Остальные не будят.

Добавлено через 15 минут
Я так подумал, если в некоторых статьях рекомендуют использовать ScheduledExecutorService вместо Timer и прочих однополчан, то можно попытаться совмещать его с AlarmManager. Конечно, это усложнит код и повысит нагрузку на процессор, но зато приведёт к нужной точности. Т.е. пока устройство не во сне, использовать ScheduledExecutorService (тут надо не выполнять повторно действия в AlarmManager), а как только оно во сне, ориентироваться на AlarmManager.
0
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
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
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
15.03.2016, 10:15 #9
Цитата Сообщение от Dark-VIN Посмотреть сообщение
Может дать приложению user-permission WAKE_LOCK...
Где-то там же написано, что это не поможет, т.к. пользователь может вручную отключить дисплей.
AlarmManager общается через BroadcastReceiver. Т.е. надо прописывать события onReceive.
0
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
17.03.2016, 14:08  [ТС] #10
Цитата Сообщение от CoolMind Посмотреть сообщение
AlarmManager общается через BroadcastReceiver. Т.е. надо прописывать события onReceive.
Нет, нет. Я имел ввиду на низком уровне. Как формируется в системе.
0
17.03.2016, 14:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2016, 14:08

App Service
Возможно ли как-то создать приложение, которое запускает сервис и при этом,...

SQLite из Service
Здравствуйте, у меня такой вопрос. Уже бьюсь 2 дня, ни как не могу сделать....

Работа с Service
Всем добрый вечер! Есть приложение под андроид. С активити, с интерфейсом,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru