Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

01.03.2014, 04:36. Просмотров 1378. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Гуру, Теория сервисов (Программирование Android):

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

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

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

Push уведомления без сторонних сервисов - Программирование Android
Есть форма php, на которой располагается одна кнопка, при нажатии на эту кнопку на мобильный телефон (android) должно прийти push...

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

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

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

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

Видел 3 проги: звонилка с кружочком-иконкой в уголке для быстрого вызова, скрытая выдвижная панелька, скрытно перекрывающая 2-3 крайних пиксела экрана и индикатор батарейки в виде тонкой полоски по верхнему краю... Это делает сервисы неубиваемыми?
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 565
06.03.2014, 22:11 #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Это делает сервисы неубиваемыми?
Точно сказать не могу, надо проверять.
0
Tester64
396 / 357 / 44
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Ищу гуру - Web
Здравствуйте!) Я ищу гуру. Мне очень хочется научиться самой делать сайты. Книжки я прочитала (HTML CSS JavaSript), а систематизировать и...

Гуру фотошопа:) - Photoshop
Ребят помогите нарисовать, тут мелочи но я не разберусь как ровно все пририсовать) Есть картинка: Нужно сделать тоже самое,...

Нужен гуру - Joomla
Нужен человек который мне поможет кое что реализовать...сам увы не могу. Человек который умеет хочет и желает работать с joomal Ваши ...


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

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

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