Google Android - это несложно
http://forum.startandroid.ru/

Урок 92. Service. Простой пример
http://forum.startandroid.ru/viewtopic.php?f=3&t=988
Страница 1 из 5

Автор:  damager82 [ 01 июл 2012, 23:00 ]
Заголовок сообщения:  Урок 92. Service. Простой пример

В этом уроке:


- создаем, запускаем и останавливаем простой сервис




Click here to read this article!

Автор:  powercat [ 31 авг 2012, 14:17 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Экспериментирую...приложение и сервис в разных процессах.
А почему после уничтожения сервис остается видим в Devices (в процессах)? И приложение, я его кнопкой Назад закрываю, тоже остается висеть в процессах...разве они не должны оттуда пропасть?

Автор:  KamiSempai [ 31 авг 2012, 14:43 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Приложение не закрывается кнопкой назад, оно сворачивсется и продолжает висеть в памяти. Если системе понадобится свободная память она сама вырубет неактивные приложения.
Такова архитектура андроид.

Автор:  powercat [ 31 авг 2012, 14:54 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

ок

Автор:  Coment [ 18 сен 2012, 17:37 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Здравствуйте.

Эмм... возможно я придираюсь, но:
Цитата:
Итак, сервис – это некая задача, которая работает в фоне и не использует UI.
А потом, после добавления кода в someTask();
Цитата:
Вывод – сервис работает в основном потоке и блокирует экран.
То есть, насколько я понял, надо все ровно создавать отдельный поток?

Автор:  powercat [ 18 сен 2012, 19:03 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Я сую его в отдельный процесс и получается - сервис сам по себе, приложение само по себе

Автор:  rezak90 [ 18 сен 2012, 19:08 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Coment оба утверждения автора являются правильны, так как в первом он не говорил о потоке, о чём вы приводите вторую его цитату.
Если не давать сервису поток, то он конечно будет выполнятся в основном. А на счёт блокирует экран - так это не есть взаимодействие с UI.

Автор:  Coment [ 18 сен 2012, 19:51 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Честно, не сочтите за придирку и троллинг, хочу досконально разобраться, так как пишу сейчас проект и планирую в скором времен попасть на должность juniora (эх... мечты = :roll: ), так вот: Graphic User Interface (GUI, UI) основной поток в котором не рекомендуется выполнять "тяжелые" задачи. Я читаю, что "service - не использует UI для своих задач" - так сказать работает в фоновом режиме. Если же мы даем ему конкретную задачу он использует UI,так?
Тогда еще вопрос - зачем мне запускать service без конкретной задачи, только для того, что бы он не занимал UI? Я понимаю, что service весьма полезный компонент, который позволяет реализовать мои задачи, даже при выключенном activity, но вот пока еще (лично для меня) остается непонятным моменты данного урока. Я думал, что все что мы "скормим" service - само будет распределятся по разным потокам и мне не нужно будет это ручками прописывать :)
Извините за такой вот каламбур. Просто, на данный момент, этот сайт и форум самые адекватные и содержательные по теме Android (Это не лесть, а правда) потому я решаюсь задавать тут вопросы ;)

Автор:  rezak90 [ 18 сен 2012, 20:41 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Цитата:
Я читаю, что "service - не использует UI для своих задач" - так сказать работает в фоновом режиме. Если же мы даем ему конкретную задачу он использует UI, так?

Не так. Вы видимо не до конца поняли суть и само понятия сервиса. Проведу аналогию с виндовс, там есть службы - например dns (все знают что она делает), так вот вы как пользователь её не видите но она есть и выполняет свою поставленную задачу.
Ну и UI понятное дело что расшифровывается как интерфейс пользователя и соответственно пользователь никак не может взаимодействовать с сервисом так как он для него "визуально не видим".
Приведу пример из приложения под андрюшку: клиент-серверное приложение - клиент это и есть наше приложение на андрюше, оно принимает какие то данные с сервера каждую минуту, так вот за приём данных отвечает сервис (служба) который дальше оповещает/передаёт данные в активити и дальше происходит взаимодействие приложение с пользователем. Просто вы ж не будете всё это писать в приложении, так как пользователь закроет приложение и взаимодействие с сервером утрачено, а так он может закрыть приложение а сервис будет спокойно работать и когда придут новые данные с сервера он оповестит (или запустит приложение) пользователя (но не через какой либо UI, так как он не видим).

Автор:  Coment [ 18 сен 2012, 20:59 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Спасибо за развернутый ответ.

Просто, как я уже писал выше, я подумал, что в android и мы конечно, давая service какую либо задачу, сей компонент сам будет создавать потоки, то бишь когда пишем
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.  void someTask() {
  2.     for (int i = 1; i<=5; i++) {
  3.       Log.d(LOG_TAG, "i = " + i);
  4.       try {
  5.         TimeUnit.SECONDS.sleep(1);
  6.       } catch (InterruptedException e) {
  7.         e.printStackTrace();
  8.       }
  9.     }
  10.   }


то бдет работать как
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.  void someTask() {
  2.     new Thread(new Runnable() {
  3.       public void run() {
  4.         for (int i = 1; i<=5; i++) {
  5.           Log.d(LOG_TAG, "i = " + i);
  6.           try {
  7.             TimeUnit.SECONDS.sleep(1);
  8.           } catch (InterruptedException e) {
  9.             e.printStackTrace();
  10.           }
  11.         }
  12.         stopSelf();
  13.       }
  14.     }).start();
  15.   }
Ну вроде если бы мы не писали отдельно потоки и handler, а вместо этого использовали async task, который сам все делает :)
А так, еще раз спасибо, предназначение service осознал, просто интересовала реализация.

Автор:  AndreyI [ 18 сен 2012, 21:06 ]
Заголовок сообщения:  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.)

Автор:  Coment [ 18 сен 2012, 21:16 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

О... стоит присмотреться. Спасибо, есть теперь чем заняться на досуге =)

Автор:  powercat [ 21 дек 2012, 11:24 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Хочу к автору обратиться....
Просто необходимо указать в уроке, что у сервиса есть подлянка, что при блокировке реального телефона он уходит в паузу, и код в нем не будет выполняться.
Именно это у меня сейчас и случилось - написал код, который должен работать в фоне, все работает на эмуляторе, а в реальном теле - пауза. Буду щас переписывать все под аларманагер из-за этого...
Это надо написать, чтобы народ не надеялся на корректную работу и не делал моих ошибок )))

Автор:  rezak90 [ 21 дек 2012, 20:22 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

powercat
Как я уже говорил что в сервисах не разбираюсь но что то мне не верится, вот только закончили проект, у него сервисы делают апдейт базы, апдейт может идти и несколько минут, за это время телефон блокироваться может десятки раз и почему то всё работает... Но к сожалению (а может и к счастью) не я эту часть писал =)

Автор:  powercat [ 22 дек 2012, 10:09 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Там есть же шняжка, не дающая телу заблокироваться, но это разовая хрень...с таймертаском же сервис не сочетается...
Тем не менее, подлянка есть, и если ее не оговорить заранее, то у того, кто надеется, что сервис живет всегда, будет облом, если он все на него завяжет...

Автор:  damager82 [ 24 дек 2012, 14:44 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

powercat писал(а):
Хочу к автору обратиться....
Просто необходимо указать в уроке, что у сервиса есть подлянка, что при блокировке реального телефона он уходит в паузу, и код в нем не будет выполняться.
Именно это у меня сейчас и случилось - написал код, который должен работать в фоне, все работает на эмуляторе, а в реальном теле - пауза. Буду щас переписывать все под аларманагер из-за этого...
Это надо написать, чтобы народ не надеялся на корректную работу и не делал моих ошибок )))

Я сам недавно об этом узнал в боевых условиях )
Думаю, будет по этой теме отдельный урок, когда разберусь полностью с темой.

Автор:  powercat [ 24 дек 2012, 14:52 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Отлично

Автор:  rezak90 [ 01 янв 2013, 16:56 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

Как я и говорил что не верю то всё таки оказался прав, можно делать бесконечный сервис. Много текста, так что дам подсказку, читайте книгу "Android 4 для профессионалов. Создание приложений для планшетных компьютеров и смартфонов. Сатия Коматинени, Дэйв Маклин", а именно глава 19. Сразу скажу что на русском в электронном варианте не найти, купить можно.

Автор:  G_O_R [ 15 янв 2013, 10:59 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

подскажите пожалуйста название события когда выделяешь текст и появляется панель со значками копировать вставить и тд. нужно в сервисе написать чтоб если кто то текст выделяет то вместе с системным панелью появился и кнопка или 2 кнопки свои.

Автор:  powercat [ 15 янв 2013, 15:02 ]
Заголовок сообщения:  Re: Урок 92. Service. Простой пример

а разве это не контектстное меню?

Страница 1 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/