1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
|
|
1 | |
Принцип работы Service11.03.2016, 21:37. Показов 964. Ответов 9
Здравствуйте, господа.
Не могу понять, что еще может Service, кроме перегружаемых методов? При первом запуске в onStartService или onStartCommand можно писать что угодно, но оно сработает только при старте или перезагрузке сервиса. Использование в сервисе Timer или AlarmManager или AsyncTask не точная. Например, при загруженности телефона эти методы срабатывают с задержкой. Да и вообще, нужен ли Service при использовнии AlarmManager? При моем тесте, без использования сервиса и закрытия приложения (System.Exit(0)), AlarmManager писал логи в заданное время с заданой последовательностью... Ну а при загруженности телефона, с задержкой. На данный момент интересует фоновое выполнение куска кода строго-настрого в точные минуты и секунды, с точным интервалом, как это делает стоковый будильник. Или следует проверять каждую секунду? И нужен ли для этого Service?
0
|
11.03.2016, 21:37 | |
Ответы с готовыми решениями:
9
Принцип работы приложения Принцип работы RecyclerView Объясните принцип работы Canvas в классе SurfaceView Более подробный принцип работы Сервиса Android |
Модератор
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 |
Что вы имеете ввиду?
Вы имеете ввиду "следует проверять каждую секунду?" - а не будет большой нагрузки на систему? И что насчет AlarmManager без использования Service?
0
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
12.03.2016, 16:41 | 4 |
Я ещё в этом не разбираюсь, но такие вопросы возникают здесь регулярно. Каждую секунду - это жесть, батарейка сядет быстро, а загрузка ЦП сильно подскочит.
0
|
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
|
|
12.03.2016, 19:20 [ТС] | 5 |
Такое впечатление, что это великий секрет, как написать неубиваемый сервис и создать точный "будильник".
На примере 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 |
Думаю можно. Я запускаю сервис startService(new Intent("d.swan.vki.Service"));
Приложение просто отправляет на сервер запрос и ждет ответа каждые 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 |
Где-то там же написано, что это не поможет, т.к. пользователь может вручную отключить дисплей.
AlarmManager общается через BroadcastReceiver. Т.е. надо прописывать события onReceive.
0
|
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 82
|
|
17.03.2016, 14:08 [ТС] | 10 |
0
|
17.03.2016, 14:08 | |
17.03.2016, 14:08 | |
Помогаю со студенческими работами здесь
10
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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |