Форум программистов, компьютерный форум CyberForum.ru

Гуру, Теория сервисов - Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
01.03.2014, 04:36     Гуру, Теория сервисов #1
Гуру, Помогите!
Перечитал уроки, основы понял, но суть ускользает. ТАКИХ нюансов в уроках нет... скорее инструкции чем понимание...

1) Сервис работает в главном потоке, поэтому правильно его использовать только как основу для его личного потока. Да-нет? При принудительном (ручном) закрытии сервиса надо просто убить поток?

2) Сервис можно запустить как вручную, так и из ресивера. Ресивер может быть любым - при загрузке ОС(автостарт), на звонок, на смс, на смену заряда и т.д. Да-нет?

3) Пробовал создать из сервиса неубиваемый поток который в бесконечном цикле проверяет время и каждую секунду обновляет "трей"-иконку(нотификэйшн), а каждые 5 секунд выводит короткий "тост". Вроде сделал правильно (и потоко-безопасно), но в среднем через 4-12 часов мигание иконки прекращается. Какие могут быть причины? Мог ли сервис "тихо" умереть без ошибок и сообщений? Например переполнение памяти? Или нельзя так часто или так много отслылать тостов/нотификэйшинов?

4) Если я буду стартовать сервис каждый час (из разных ресиверов, по "будильнику"-отложеному запуску, из другого сервиса или потока) - это будет один сервис или его дубли?

5) Переопределяю Application. Можно ли хранить в ней глобальные переменные доступные из сервиса? Или класс Application умирает после закрытия главной формы и не привязан к основной программе ничем кроме PendingIntent, BroadcastReceiver или биддинг (в эти методики пока не вникал)?

6) Можно ли обычную форму (активити) привязать только к сервису? Встречал в чужих программах ручные диалоги или даже полноэкранные формы, которые потом не светились в менеджере задач на долгом удержании HOME. Или сервис тут не причем - тонкая игра с обычными активити?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
04.03.2014, 04:44  [ТС]     Гуру, Теория сервисов #2
ну-же! мне все еще нужны советы... Уже набежало 3-4 проекта, где не помешало бы начать написание с ПРАВИЛЬНОГО сервиса, а не интерфейса.

Например будильник-напоминалка. Она не должна ТИХО сдохнуть через 4 часа работы или перехода в спящий режим кнопкой питания.
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
04.03.2014, 10:02     Гуру, Теория сервисов #3
Цитата Сообщение от Tester64 Посмотреть сообщение
1) Сервис работает в главном потоке, поэтому правильно его использовать только как основу для его личного потока. Да-нет? При принудительном (ручном) закрытии сервиса надо просто убить поток?
Да в главном потоке работает. Для завершения работы сервиса убить поток (который стартовал где-то внутри него) недостаточно. Надо еще и stopService() вызывать.
Цитата Сообщение от Tester64 Посмотреть сообщение
2) Сервис можно запустить как вручную, так и из ресивера. Ресивер может быть любым - при загрузке ОС(автостарт), на звонок, на смс, на смену заряда и т.д. Да-нет?
Да, уверен что можно
Цитата Сообщение от Tester64 Посмотреть сообщение
3) Пробовал создать из сервиса неубиваемый поток который в бесконечном цикле проверяет время и каждую секунду обновляет "трей"-иконку(нотификэйшн), а каждые 5 секунд выводит короткий "тост". Вроде сделал правильно (и потоко-безопасно), но в среднем через 4-12 часов мигание иконки прекращается. Какие могут быть причины? Мог ли сервис "тихо" умереть без ошибок и сообщений? Например переполнение памяти? Или нельзя так часто или так много отслылать тостов/нотификэйшинов?
Обычный сервис может умереть в любой момент когда понадобится память для более приоритетной задачи. Но, можно сделать любой сервис бессмертным при помощи метода startForeground. После его вызова вылезет соответствующее уведомление и сервис станет не убиваемым.
Цитата Сообщение от Tester64 Посмотреть сообщение
4) Если я буду стартовать сервис каждый час (из разных ресиверов, по "будильнику"-отложеному запуску, из другого сервиса или потока) - это будет один сервис или его дубли?
Один и тот же
Цитата Сообщение от Tester64 Посмотреть сообщение
5) Переопределяю Application. Можно ли хранить в ней глобальные переменные доступные из сервиса? Или класс Application умирает после закрытия главной формы и не привязан к основной программе ничем кроме PendingIntent, BroadcastReceiver или биддинг (в эти методики пока не вникал)?
Да, уверен что можно
Цитата Сообщение от Tester64 Посмотреть сообщение
6) Можно ли обычную форму (активити) привязать только к сервису? Встречал в чужих программах ручные диалоги или даже полноэкранные формы, которые потом не светились в менеджере задач на долгом удержании HOME. Или сервис тут не причем - тонкая игра с обычными активити?
К сервису это отношения не имеет. Просто активити была запущена с флагом FLAG_ACTIVITY_NO_HISTORY
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
05.03.2014, 19:38  [ТС]     Гуру, Теория сервисов #4
Цитата Сообщение от angryrobot Посмотреть сообщение
startForeground.
Пытаюсь с этим разобраться...
Я правильно понял - эта команда повышает "приоритет" сервиса, но ОБЯЗАТЕЛЬНО требует вывод иконки в трей? Я подобное встречал в настройках других программ "добавить иконку (повысит приоритет задачи)".
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
05.03.2014, 20:30     Гуру, Теория сервисов #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Я правильно понял - эта команда повышает "приоритет" сервиса, но ОБЯЗАТЕЛЬНО требует вывод иконки в трей? Я подобное встречал в настройках других программ "добавить иконку (повысит приоритет задачи)".
Да все верно. Принцип такой: то что пользователь видит на экране убивать нельзя.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
06.03.2014, 22:02  [ТС]     Гуру, Теория сервисов #6
Цитата Сообщение от angryrobot Посмотреть сообщение
то что пользователь видит на экране убивать нельзя
А если сервис создает (и держит) микроокошко, оно станет "неубиваемым"?

Видел 3 проги: звонилка с кружочком-иконкой в уголке для быстрого вызова, скрытая выдвижная панелька, скрытно перекрывающая 2-3 крайних пиксела экрана и индикатор батарейки в виде тонкой полоски по верхнему краю... Это делает сервисы неубиваемыми?
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
06.03.2014, 22:11     Гуру, Теория сервисов #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Это делает сервисы неубиваемыми?
Точно сказать не могу, надо проверять.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 01:31     Гуру, Теория сервисов
Еще ссылки по теме:

Ищу гуру
Написание программ для сервисов Теория
Теория. Какой IF лучше? Android
Push уведомления без сторонних сервисов Android

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

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
07.03.2014, 01:31  [ТС]     Гуру, Теория сервисов #8
Понятно... буду проверять...
Просто задумал уже 7(!) проектов где похоже сервис обязан быть ядром. И как минимум в 3х из них некому перезапустить сервис в случае зависания... (напоминалка, автообновлялка, следилка, сетевой чат)Выводить 3 иконки в трей - много. У меня и раньше было 4 иконки там (слева и 5+часы справа).
Где-то (возможно на хабре) читал статью про "неубиваемый сервис" (ссылку надо искать). Там надежность поддерживалась отложеным таймером-будильником на перезапуск каждые 5 минут.
Хочу попробовать написать пару сервисов, которые будут повышать надежность (перезапускать) друг друга...
Yandex
Объявления
07.03.2014, 01:31     Гуру, Теория сервисов
Ответ Создать тему
Опции темы

Текущее время: 18:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru