Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

01.03.2014, 04:36. Просмотров 1392. Ответов 7
Метки нет (Все метки)

Гуру, Помогите!
Перечитал уроки, основы понял, но суть ускользает. ТАКИХ нюансов в уроках нет... скорее инструкции чем понимание...

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

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

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

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

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

6) Можно ли обычную форму (активити) привязать только к сервису? Встречал в чужих программах ручные диалоги или даже полноэкранные формы, которые потом не светились в менеджере задач на долгом удержании HOME. Или сервис тут не причем - тонкая игра с обычными активити?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 04:36
Ответы с готовыми решениями:

Использование Сервисов
Итак задача: 1. Сервис работает с неким сервером в сети и постоянно...

Гуру, проконсультируйте по изменению списка контактов
Пытаюсь написать синхронизатор номеров с моим списком (из текстового...

Обьясните работу сервисов в fcm
Задался вопросом, как работают собственно push-уведомления. В Android, чтобы...

Разъясните гуру как такое может быть!
Купил Навигатор с регистратором. На андроиде. Но андроид какой-то...

Push уведомления без сторонних сервисов
Есть форма php, на которой располагается одна кнопка, при нажатии на эту кнопку...

7
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2014, 04:44  [ТС] #2
ну-же! мне все еще нужны советы... Уже набежало 3-4 проекта, где не помешало бы начать написание с ПРАВИЛЬНОГО сервиса, а не интерфейса.

Например будильник-напоминалка. Она не должна ТИХО сдохнуть через 4 часа работы или перехода в спящий режим кнопкой питания.
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
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
2
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2014, 19:38  [ТС] #4
Цитата Сообщение от angryrobot Посмотреть сообщение
startForeground.
Пытаюсь с этим разобраться...
Я правильно понял - эта команда повышает "приоритет" сервиса, но ОБЯЗАТЕЛЬНО требует вывод иконки в трей? Я подобное встречал в настройках других программ "добавить иконку (повысит приоритет задачи)".
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
05.03.2014, 20:30 #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Я правильно понял - эта команда повышает "приоритет" сервиса, но ОБЯЗАТЕЛЬНО требует вывод иконки в трей? Я подобное встречал в настройках других программ "добавить иконку (повысит приоритет задачи)".
Да все верно. Принцип такой: то что пользователь видит на экране убивать нельзя.
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
06.03.2014, 22:02  [ТС] #6
Цитата Сообщение от angryrobot Посмотреть сообщение
то что пользователь видит на экране убивать нельзя
А если сервис создает (и держит) микроокошко, оно станет "неубиваемым"?

Видел 3 проги: звонилка с кружочком-иконкой в уголке для быстрого вызова, скрытая выдвижная панелька, скрытно перекрывающая 2-3 крайних пиксела экрана и индикатор батарейки в виде тонкой полоски по верхнему краю... Это делает сервисы неубиваемыми?
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
06.03.2014, 22:11 #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Это делает сервисы неубиваемыми?
Точно сказать не могу, надо проверять.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
07.03.2014, 01:31  [ТС] #8
Понятно... буду проверять...
Просто задумал уже 7(!) проектов где похоже сервис обязан быть ядром. И как минимум в 3х из них некому перезапустить сервис в случае зависания... (напоминалка, автообновлялка, следилка, сетевой чат)Выводить 3 иконки в трей - много. У меня и раньше было 4 иконки там (слева и 5+часы справа).
Где-то (возможно на хабре) читал статью про "неубиваемый сервис" (ссылку надо искать). Там надежность поддерживалась отложеным таймером-будильником на перезапуск каждые 5 минут.
Хочу попробовать написать пару сервисов, которые будут повышать надежность (перезапускать) друг друга...
0
07.03.2014, 01:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 01:31

Как получить приблизительное местоположение пользователя без использования сервисов Google?
Добрый день, Никак не могу войти под старым ником, поэтому вновь...

Написание программ для сервисов Теория
Здравствуйте, возник вопрос, я изучаю qt и стало интересно, как пишутся...

Теория принятия решений Теория игр
Команды факультетов A и B определяют свои стратегии игры в первенстве...


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

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

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