Урок 92. Service. Простой пример
Урок 92. Service. Простой пример
В этом уроке:
- создаем, запускаем и останавливаем простой сервис
Click here to read this article!
- создаем, запускаем и останавливаем простой сервис
Click here to read this article!
Последний раз редактировалось damager82 22 май 2017, 23:41, всего редактировалось 9 раз.
Re: Урок 92. Service. Простой пример
Экспериментирую...приложение и сервис в разных процессах.
А почему после уничтожения сервис остается видим в Devices (в процессах)? И приложение, я его кнопкой Назад закрываю, тоже остается висеть в процессах...разве они не должны оттуда пропасть?
А почему после уничтожения сервис остается видим в Devices (в процессах)? И приложение, я его кнопкой Назад закрываю, тоже остается висеть в процессах...разве они не должны оттуда пропасть?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 92. Service. Простой пример
Приложение не закрывается кнопкой назад, оно сворачивсется и продолжает висеть в памяти. Если системе понадобится свободная память она сама вырубет неактивные приложения.
Такова архитектура андроид.
Такова архитектура андроид.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 92. Service. Простой пример
Здравствуйте.
Эмм... возможно я придираюсь, но:
Эмм... возможно я придираюсь, но:
А потом, после добавления кода в someTask();Итак, сервис – это некая задача, которая работает в фоне и не использует UI.
То есть, насколько я понял, надо все ровно создавать отдельный поток?Вывод – сервис работает в основном потоке и блокирует экран.
Re: Урок 92. Service. Простой пример
Я сую его в отдельный процесс и получается - сервис сам по себе, приложение само по себе
Re: Урок 92. Service. Простой пример
Coment оба утверждения автора являются правильны, так как в первом он не говорил о потоке, о чём вы приводите вторую его цитату.
Если не давать сервису поток, то он конечно будет выполнятся в основном. А на счёт блокирует экран - так это не есть взаимодействие с UI.
Если не давать сервису поток, то он конечно будет выполнятся в основном. А на счёт блокирует экран - так это не есть взаимодействие с UI.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 92. Service. Простой пример
Честно, не сочтите за придирку и троллинг, хочу досконально разобраться, так как пишу сейчас проект и планирую в скором времен попасть на должность juniora (эх... мечты = ), так вот: Graphic User Interface (GUI, UI) основной поток в котором не рекомендуется выполнять "тяжелые" задачи. Я читаю, что "service - не использует UI для своих задач" - так сказать работает в фоновом режиме. Если же мы даем ему конкретную задачу он использует UI,так?
Тогда еще вопрос - зачем мне запускать service без конкретной задачи, только для того, что бы он не занимал UI? Я понимаю, что service весьма полезный компонент, который позволяет реализовать мои задачи, даже при выключенном activity, но вот пока еще (лично для меня) остается непонятным моменты данного урока. Я думал, что все что мы "скормим" service - само будет распределятся по разным потокам и мне не нужно будет это ручками прописывать
Извините за такой вот каламбур. Просто, на данный момент, этот сайт и форум самые адекватные и содержательные по теме Android (Это не лесть, а правда) потому я решаюсь задавать тут вопросы
Тогда еще вопрос - зачем мне запускать service без конкретной задачи, только для того, что бы он не занимал UI? Я понимаю, что service весьма полезный компонент, который позволяет реализовать мои задачи, даже при выключенном activity, но вот пока еще (лично для меня) остается непонятным моменты данного урока. Я думал, что все что мы "скормим" service - само будет распределятся по разным потокам и мне не нужно будет это ручками прописывать
Извините за такой вот каламбур. Просто, на данный момент, этот сайт и форум самые адекватные и содержательные по теме Android (Это не лесть, а правда) потому я решаюсь задавать тут вопросы
Re: Урок 92. Service. Простой пример
Не так. Вы видимо не до конца поняли суть и само понятия сервиса. Проведу аналогию с виндовс, там есть службы - например dns (все знают что она делает), так вот вы как пользователь её не видите но она есть и выполняет свою поставленную задачу.Я читаю, что "service - не использует UI для своих задач" - так сказать работает в фоновом режиме. Если же мы даем ему конкретную задачу он использует UI, так?
Ну и UI понятное дело что расшифровывается как интерфейс пользователя и соответственно пользователь никак не может взаимодействовать с сервисом так как он для него "визуально не видим".
Приведу пример из приложения под андрюшку: клиент-серверное приложение - клиент это и есть наше приложение на андрюше, оно принимает какие то данные с сервера каждую минуту, так вот за приём данных отвечает сервис (служба) который дальше оповещает/передаёт данные в активити и дальше происходит взаимодействие приложение с пользователем. Просто вы ж не будете всё это писать в приложении, так как пользователь закроет приложение и взаимодействие с сервером утрачено, а так он может закрыть приложение а сервис будет спокойно работать и когда придут новые данные с сервера он оповестит (или запустит приложение) пользователя (но не через какой либо UI, так как он не видим).
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 92. Service. Простой пример
Спасибо за развернутый ответ.
Просто, как я уже писал выше, я подумал, что в android и мы конечно, давая service какую либо задачу, сей компонент сам будет создавать потоки, то бишь когда пишем
то бдет работать как Ну вроде если бы мы не писали отдельно потоки и handler, а вместо этого использовали async task, который сам все делает
А так, еще раз спасибо, предназначение service осознал, просто интересовала реализация.
Просто, как я уже писал выше, я подумал, что в android и мы конечно, давая service какую либо задачу, сей компонент сам будет создавать потоки, то бишь когда пишем
Код: Выделить всё
void someTask() {
for (int i = 1; i<=5; i++) {
Log.d(LOG_TAG, "i = " + i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
то бдет работать как
Код: Выделить всё
void someTask() {
new Thread(new Runnable() {
public void run() {
for (int i = 1; i<=5; i++) {
Log.d(LOG_TAG, "i = " + i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
stopSelf();
}
}).start();
}
А так, еще раз спасибо, предназначение service осознал, просто интересовала реализация.
Последний раз редактировалось Coment 18 сен 2012, 21:07, всего редактировалось 1 раз.
Re: Урок 92. Service. Простой пример
Можете использовать IntentService
Он тоже сам все делает
Он тоже сам все делает
Extending the IntentService class
Because most started services don't need to handle multiple requests simultaneously (which can actually be a dangerous multi-threading scenario), it's probably best if you implement your service using the IntentService class.
The IntentService does the following:
Creates a default worker thread that executes all intents delivered to onStartCommand() separate from your application's main thread.
Creates a work queue that passes one intent at a time to your onHandleIntent() implementation, so you never have to worry about multi-threading.
Stops the service after all start requests have been handled, so you never have to call stopSelf().
Provides default implementation of onBind() that returns null.
Provides a default implementation of onStartCommand() that sends the intent to the work queue and then to your onHandleIntent() implementation.
All this adds up to the fact that all you need to do is implement onHandleIntent() to do the work provided by the client. (Though, you also need to provide a small constructor for the service.)
Re: Урок 92. Service. Простой пример
О... стоит присмотреться. Спасибо, есть теперь чем заняться на досуге =)
Re: Урок 92. Service. Простой пример
Хочу к автору обратиться....
Просто необходимо указать в уроке, что у сервиса есть подлянка, что при блокировке реального телефона он уходит в паузу, и код в нем не будет выполняться.
Именно это у меня сейчас и случилось - написал код, который должен работать в фоне, все работает на эмуляторе, а в реальном теле - пауза. Буду щас переписывать все под аларманагер из-за этого...
Это надо написать, чтобы народ не надеялся на корректную работу и не делал моих ошибок )))
Просто необходимо указать в уроке, что у сервиса есть подлянка, что при блокировке реального телефона он уходит в паузу, и код в нем не будет выполняться.
Именно это у меня сейчас и случилось - написал код, который должен работать в фоне, все работает на эмуляторе, а в реальном теле - пауза. Буду щас переписывать все под аларманагер из-за этого...
Это надо написать, чтобы народ не надеялся на корректную работу и не делал моих ошибок )))
Re: Урок 92. Service. Простой пример
powercat
Как я уже говорил что в сервисах не разбираюсь но что то мне не верится, вот только закончили проект, у него сервисы делают апдейт базы, апдейт может идти и несколько минут, за это время телефон блокироваться может десятки раз и почему то всё работает... Но к сожалению (а может и к счастью) не я эту часть писал =)
Как я уже говорил что в сервисах не разбираюсь но что то мне не верится, вот только закончили проект, у него сервисы делают апдейт базы, апдейт может идти и несколько минут, за это время телефон блокироваться может десятки раз и почему то всё работает... Но к сожалению (а может и к счастью) не я эту часть писал =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 92. Service. Простой пример
Там есть же шняжка, не дающая телу заблокироваться, но это разовая хрень...с таймертаском же сервис не сочетается...
Тем не менее, подлянка есть, и если ее не оговорить заранее, то у того, кто надеется, что сервис живет всегда, будет облом, если он все на него завяжет...
Тем не менее, подлянка есть, и если ее не оговорить заранее, то у того, кто надеется, что сервис живет всегда, будет облом, если он все на него завяжет...
Re: Урок 92. Service. Простой пример
Я сам недавно об этом узнал в боевых условиях )powercat писал(а):Хочу к автору обратиться....
Просто необходимо указать в уроке, что у сервиса есть подлянка, что при блокировке реального телефона он уходит в паузу, и код в нем не будет выполняться.
Именно это у меня сейчас и случилось - написал код, который должен работать в фоне, все работает на эмуляторе, а в реальном теле - пауза. Буду щас переписывать все под аларманагер из-за этого...
Это надо написать, чтобы народ не надеялся на корректную работу и не делал моих ошибок )))
Думаю, будет по этой теме отдельный урок, когда разберусь полностью с темой.
Re: Урок 92. Service. Простой пример
Как я и говорил что не верю то всё таки оказался прав, можно делать бесконечный сервис. Много текста, так что дам подсказку, читайте книгу "Android 4 для профессионалов. Создание приложений для планшетных компьютеров и смартфонов. Сатия Коматинени, Дэйв Маклин", а именно глава 19. Сразу скажу что на русском в электронном варианте не найти, купить можно.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 92. Service. Простой пример
подскажите пожалуйста название события когда выделяешь текст и появляется панель со значками копировать вставить и тд. нужно в сервисе написать чтоб если кто то текст выделяет то вместе с системным панелью появился и кнопка или 2 кнопки свои.
Re: Урок 92. Service. Простой пример
а разве это не контектстное меню?