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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Гуру, Теория сервисов - Программирование Android

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

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

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

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

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

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

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

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

Использование Сервисов - Программирование Android
Итак задача: 1. Сервис работает с неким сервером в сети и постоянно запрашивает у того некоторые данные. 2. Данные есть критичные и...

Гуру, проконсультируйте по изменению списка контактов - Программирование Android
Пытаюсь написать синхронизатор номеров с моим списком (из текстового CSV-файла). Надо полноценно 1) добавлять контакт с МОИМ кодом...

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

Теория по Android - Программирование Android
Здравствуйте друзья, есть такой вопрос. У параметра Visibility есть такие INVISIBLE и GONE. С INVISIBIL все понятно, прячет элемент, а вот...

Теория по рисованию - Программирование Android
Доброе время суток! Хочу узнать подробнее о рисовании в андроиде. Мне нужно отображения анимации 120 элементов по заданной...

Теория. Какой IF лучше? - Программирование Android
Добрый день. Хочу понять какой IF лучше использовать, какие недостатки и плюсы. Есть ли вообще разница. Возможно есть разница в...

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

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

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

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

Теория принятия решений Теория игр - Математика
Команды факультетов A и B определяют свои стратегии игры в первенстве университета по баскетболу. Оценивая возможности своих «запасных...

Гуру запросов - SQL Server
Здравствуйте, у меня есть 2 таблицы в них есть поля с датой, номером и количеством. Посути в одной товар остаток день, в другой товар...


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

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

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