Сервис (обычно в русской литературе применяется термин служба, но мы будем использовать слово сервис из-за созвучности с именем класса) это объект типа Service, который может выполнять длительные операции в фоновом режиме и который не предоставляет пользовательский интерфейс. Другие компоненты приложения могут запустить сервис и он будет работать в фоновом режиме, даже если пользователь переключится в другое приложение. К тому же, компонент может быть связан с сервисом и даже выполнять межпроцессное взаимодействие с ним. Например, сервис может выполнять загрузку по сети, проигрывать музыкальный файл, записывать или читать из файла или взаимодействовать с поставщиками содержимого, и все это в фоновом режиме.
Сервис может находиться в двух состояниях:
Запущен Сервис “запущен”, если компонент приложения запустил его с помощью метода startService(). После запуска сервис бесконечно работает в фоновом режиме, даже если запустивший его компонент уже уничтожен. Обычно запущенный сервис выполняет одну операцию и не возвращает результат. Например, это может быть скачивание файла по сети.
Персональный календарь на mingli.ru (инструкция по применению)
Когда операция заканчивается, сервис должен сам себя остановить. Связан Сервис “связан”, если компонент вызвал метод bindService(). Связанный сервис предлагает клиент-серверный интерфейс, позволяющий компонентам взаимодействовать с ним, отправлять запросы, получать результат, и даже выполнять межпроцессное взаимодействие (IPC). Связанный сервис работает до тех пор, пока другой компонент приложения с ним связан. С сервисом может быть связано несколько компонентов, и как только последний из них разрывает связь, сервис уничтожается.
Хотя в этом документе оба типа сервисов обсуждаются отдельно, ваши сервисы могут работать в любом режиме – они могут быть запущены или связаны. Все зависит от того, как вы реализуете пару методов обратного вызова onStartCommand() для разрешения запуска и onBind() для разрешения связывания.
Независимо от того, запущено приложение, связано или и то и другое вместе, любой компонент может использовать сервис (даже компонент другого приложения), также, как любой компонент может использовать явления – запустив его с помощью намерения Intent. Однако, вы можете объявить частный сервис в манифесте и заблокировать доступ к нему из других приложений. Это мы обсудим ниже.
Внимание: сервисы запускаются в основном потоке процесса – сервис не создает его собственный поток и не запускается в отдельном процессе (если не указано иное). Это означает, что если ваш сервис загружает процессор или блокирует операции (например проигрывает mp3), вы должны создавать для него отдельный поток. Таким образом вы предотвратите потенциальную ошибку Приложение не отвечает (ANR) и пользователь все еще сможет взаимодействовать с приложением в его основном потоке.
Основы
Когда использовать сервисы и потоки?
Сервис это простой компонент, который может работать в фоновом режиме даже если пользователь не взаимодействует с приложением. Поэтому создавайте сервис, только если он вам нужен.
EMM. Как корпорации управляют своими устройствами на Android
Если вам необходимо выполнять работу за пределами основного потока, но только когда пользователь взаимодействует с приложением – используйте еще один поток, но не создавайте сервис. Например, если вам нужно проиграть музыку, но только пока явление запущено, вы можете создать поток в методе onCreate() , запустить его выполнение в методе onStart() и остановить в методе onStop() . Также подумать об использовании AsyncTask или HandlerThread.
Помните, что сервис по умолчанию работает в основном потоке приложения, поэтому создавайте для него отдельный поток, если в нем выполняется интенсивная работа с процессором или он блокирует операции.
Для создания сервиса необходимо создать подкласс Service. В нем необходимо переопределить некоторые методы обратного вызова, которые связаны с его жизненным циклом и предоставляют компонентам механизм связывания. Вот наиболее важные методы, которые необходимо реализовать:
onStartCommand() Система вызывает этот метод, когда другой компонент, вроде явления, запрашивает запуск сервиса с помощью метода startService(). После выполнения метода сервис запускается и бесконечно работает в фоновом режиме.
Если вы реализовали данный метод, позаботьтесь об остановке сервиса после выполнения его работы, вызвав метод stopSelf() или stopService() (Если вы собираетесь предоставлять только связывание, вам не нужно реализовывать данный метод). onBind() Система вызывает данный метод, когда другой компонент хочет установить связь с сервисом и вызывает метод bindService(). В вашей реализации метода необходимо предоставить интерфейс, который будет использовать клиент для взаимодействия с сервисом.
Для этого метод должен вернуть объект типа IBinder. Этот метод всегда должен быть реализован, но в случае, если сервис не разрешает связывание, метод должен возвращать null. onCreate() Система вызывает этот метод при создании сервиса для выполнения первоначальных настроек (до вызова onStartCommand() или onBind()). Если сервис уже запущен, данный метод не вызывается. onDestroy() Метод вызывается когда сервис долгое время не используется и должен быть уничтожен. Сервис должен реализовывать данный метод для освобождения ресурсов, вроде потоков, зарегистрированных слушателей, приемников и.т.п. Этот метод вызывается самым последним перед уничтожением сервиса.
Если компонент запускает сервис с помощью метода startService(), сервис продолжает работать, пока не остановит сам себя или пока его не остановит другой компонент с помощью метода stopService().
Если компонент создает сервис с помощью метода bindService(), сервис будет запущен, пока компонент с ним связан.
Система Android принудительно останавливает сервис только когда заканчивается память и ее необходимо освободить для явления, которое получило пользовательский фокус. Если сервис связан с явлением, получившим фокус, то маловероятно, что он будет остановлен, а если сервис объявлен для работы на переднем плане (обсуждается ниже), он практически никогда не будет остановлен.
Если же сервис выполняется уже длительное время, система понижает его позицию в списке фоновых задач и он будет первым кандидатом на отключение. Поэтому не забывайте должным образом обрабатывать перезапуск вашего сервиса системой. Если система уничтожила сервис, он перезапускается как только появятся свободные ресурсы (хотя это также зависит от значения, которое возвращает метод onStartCommand(), но об этом поговорим позже). Подробная информация об уничтожении сервисов системой содержится в разделе Процессы и потоки.
В следующих разделах мы покажем как создавать сервисы различных типов и как взаимодействовать с ними их других компонентов приложения.
Объявление сервиса в манифесте
Аналогично явлениям и другим компонентам, вы должны объявить все сервисы приложения в файле манифеста. Для этого добавьте дочерний элемент в , например:
Источник: easyandroid.ru
Принтеры HP — Печать с помощью приложения Mopria Print Service (ОС Android)
Вы можете легко выполнять печать на принтере HP, совместимом с Mopria, с помощью приложения Mopria Print Service. Приложение Mopria Print Service позволяет воспользоваться дополнительными функциональными возможностями принтера на смартфоне или планшете с ОС Android без дополнительной настройки.
Печать с помощью приложения Mopria Print Service
Выполняйте печать фотографий, документов, сообщений электронной почты или веб-страниц с мобильного устройства.
Убедитесь, что принтер и мобильное устройство готовы к печати.
Принтер должен быть подключен к сети, или на нем должна быть включена технология Wi-Fi Direct.
Мобильное устройство и принтер должны быть подключены к одной сети и должны находиться на расстоянии не более 1,8 м от маршрутизатора.
Android 7 (Nougat) или более ранней версии. Приложение Mopria Print Service (на английском языке) должно быть установлено и включено в меню Настройки на устройстве.
На мобильном устройстве откройте элемент, который требуется напечатать.
Коснитесь значка «Меню» , затем выберите Печать .
Выберите имя принтера.
Коснитесь стрелки вниз , затем измените требуемые параметры печати, такие как диапазон страниц, границы или качество печати.
Коснитесь значка «Печать» .
Дополнительные сведения см. в документе Mopria — Печать из ОС Android (на английском языке).
Ответы на часто задаваемые вопросы
Ознакомьтесь с этими часто задаваемыми вопросами, чтобы получить дополнительные сведения о приложении Mopria Print Service для устройств с ОС Android.
Поддерживает ли мой принтер HP приложение Mopria Print Service?
Большинство принтеров HP, выпущенных после 2014 года, поддерживают приложение Mopria Print Service. Полный список принтеров, поддерживающих приложение Mopria Print Service, см. в документе Продукты, совместимые с Mopria (на английском языке).
Что делать, если не удается печатать на принтере?
Задание печати, отправленное на принтер с устройства Android, не печатается. Существует несколько возможных причин появления данной проблемы.
Шаг 1. Проверьте состояние подключения к сети
Проблемы с подключением могут влиять на задания печати, отправляемые с мобильного устройства.
Мой принтер подключен к беспроводной сети
Убедитесь в том, что устройство Android, принтер и сеть работают исправно и готовы к печати.
Убедитесь, что устройство Android подключено к сети: На устройстве Android откройте параметры Wi-Fi и убедитесь, что устройство подключено к сети, к которой требуется подключить принтер.
Убедитесь, что принтер работает и подключен к сети: Принтер может находиться в спящем режиме, энергосберегающем режиме или быть выключен. Нажмите кнопку на панели управления принтера, чтобы вывести принтер из спящего режима. Для подтверждения подключения вашего принтера выберите тип подключения.
Беспроводное сетевое подключение: Индикатор рядом со значком беспроводного подключения должен гореть ровно или мигать. Если индикатор беспроводного подключения не горит и не мигает, нажмите кнопку беспроводного подключения или откройте меню беспроводной сети либо меню параметров, чтобы убедиться в наличии сигнала беспроводной сети.
Проводное сетевое подключение: Убедитесь, что кабель подключен к порту Ethernet принтера и вставлен в свободный порт на корпусе маршрутизатора. Если кабель подключен, зеленый индикатор будет гореть, не мигая, а оранжевый индикатор активности будет мигать.
Проверьте полосу частот маршрутизатора: многие маршрутизаторы могут работать в обеих полосах частот: 2,4 ГГц и 5,0 ГГц, но не все принтеры HP поддерживают обе полосы. Убедитесь, что на маршрутизаторе включена полоса частот 2,4 ГГц и широковещание на ней. Если маршрутизатор передает различные имена сетей (SSID) для каждой полосы, подключите принтер к SSID, соответствующему полосе 2,4 ГГц.
Принтер подключен с помощью функции Wi-Fi Direct
Убедитесь в том, что устройство Android и принтер работают исправно и готовы к печати.
Убедитесь, что устройство Android подключено к принтеру: При запуске задания печати Wi-Fi Direct на мобильном устройстве появляется запрос на подтверждение подключения. На принтере также может понадобиться выполнить подтверждение. Изучите уведомления на мобильном устройстве, чтобы узнать, какие действия следует предпринять.
Убедитесь, что принтер включен и функция Wi-Fi Direct активна: Принтер может находиться в спящем режиме или быть выключен. Нажмите кнопку на панели управления, чтобы убедиться в том, что принтер включен, затем проверьте настройки Wi-Fi Direct на принтере.
Поддерживайте подключение Wi-Fi на вашем мобильном устройстве: Разрыв подключения Wi-Fi Direct между мобильным устройством и принтером может привести к сбою заданий печати. Подключение не должно разрываться до завершения задания печати.
Шаг 2. Очистите кэш очереди печати в Android OS
Иногда сброс и очистка кэша очереди печати в Android OS может устранить проблему.
На устройстве Android нажмите значок Параметры и выберите Мобильные приложения или Приложения .
Нажмите значок Меню и выберите Показать системные приложения .
Выберите Очередь печати .
Выберите Память , затем нажмите Очистить кэш и Очистить данные .
Закройте меню «Параметры», вернитесь в приложение, из которого выполняется печать, затем отправьте задание печати.
Можно ли выполнить печать, если в приложении нет функции печати?
Если используемое приложение не поддерживает печать, можно отправить отдельные фотографии или файлы PDF в приложение Mopria Print Service с помощью функций Поделиться, Просмотр, Экспорт или Открыть в ОС Android.
Примечание.
Меню, значки и местоположение настроек печати зависят от версии Android и производителя устройства.
Откройте элемент, который следует напечатать, затем нажмите значок Поделиться , меню Поделиться или параметры Экспорт, Открыть с помощью или Отправить.
Появится список поддерживаемых приложений.
Нажмите Печать Mopria .
Появится экран предварительного просмотра. Применительно к веб-страницам может понадобиться повторно нажать значок печати.
Примечание.
При использовании функции «Поделиться» для приложения Mopria Print Service одновременно можно отправить только одну фотографию или файл PDF.
Можно ли вручную добавить принтер в приложение Mopria Print Service?
Если служба печати не обнаруживает принтер, который точно подключен к соответствующей сети, можно добавить принтер вручную, используя его IP-адрес.
Посмотрите информацию об IP-адресе принтера на панели управления или напечатайте информационную страницу.
Источник: support.hp.com
Canon Print Service
Canon Print Service — это программное обеспечение, которое позволяет выполнять печать непосредственно из меню приложений, поддерживающих печатную подсистему Android. Оно позволяет печатать из смартфонов и планшетов на принтеры Canon, подключенные к беспроводным сетям.
Основные функции:
— Переключение между цветной и черно-белой печатью
— 2-сторонняя печать
— Печать 2 на 1
— Печать без полей
— Сшивание страниц
— Задание типов бумаги
— Безопасная печать
— Управление ID отдела
— Прямая печать PDF-файлов
— Обнаружение принтера путем указания IP-адреса
— Вызов из общего меню
* Возможные настройки зависят от используемого принтера.
*Если при открытии приложения появится запрос о предоставлении разрешения на уведомления, коснитесь «Разрешить».
Если используется мобильное устройство с Android 6 или более ранней версии:
Для печати с использованием сервиса Canon Print Service требуется его активировать. Canon Print Service не активируется мгновенно после установки. Его следует активировать, используя один из следующих способов.
— Коснитесь значка, отображаемого в области уведомлений сразу после установки, и активируйте сервис на отображаемом экране настройки.
— Коснитесь пункта [Настройки] > [Печать] > [Canon Print Service] и активируйте сервис на отображаемом экране настройки.
* Если используется мобильное устройство с Android 7 или более поздней версии, служба автоматически активируется после установки.
— Струйные принтеры Canon
Серия PIXMA TS, серия TR, серия MG, серия MX, серия G, серия GM, серия E, серия PRO, серия MP, серия iP, серия iX
Серия MAXIFY MB, серия iB, серия GX
Серия imagePROGRAF PRO, серия GP, Серия TX, Серия TM, Серия TA, Серия TZ
— Серия imageRUNNER ADVANCE
— Серия Color imageRUNNER
— Серия imageRUNNER
— Серия Color imageCLASS
— Серия imageCLASS
— Серия i-SENSYS
— Серия imagePRESS
— Серия LBP
— Серия Satera
— Серия Laser Shot
— Компатные фотопринтеры Canon
Серия SELPHY CP900, CP1200, CP1300
Совместимые ОС/терминалы:
— Терминалы с Android 4.4.2 (KitKat) или более поздней версии.
Источник: m.apkpure.com
Service и IntentService в Android: руководство по Службам и пример использования
Service (Сервис) или Служба является одним из основных компонентов Android. Он используется повсеместно: от функционала для фонового скачивания файлов с интернета до проигрывания музыки с файловой системы устройства. Поэтому любому андроид разработчику необходимо понимать как работает компонент Service и уметь его правильно использовать.
Теория по Service в Android
Служба работает в фоновом режиме, а это означает, что она не имеет пользовательского интерфейса и не зависит от Activity. Таким образом, Activity может быть уничтожена операционной системой, а Service продолжит работать в фоновом режиме. Чаще всего служба используется для выполнения длительных операций, с которыми не справится какой-нибудь AsyncTask.
Есть 2 типа служб в Android:
- Непривязанная служба (Unbound service)
- Привязанная служба (Bound service)
Unbound service — это служба, которая запускается Activity или с помощью BroadcastReceiver и не зависит от Activity. Он всегда будет работать в фоновом режиме. Такую службу может убить только система Android, когда ей недостаточно памяти для выполнения более приоритетных задачи.
Есть 2 типа непривязанной службы:
- Служба, которая наследуется от класса Service.
- Служба, которая наследуется от класса IntentService.
Рассмотрим разницу между ними и где лучше использовать каждый тип:
Служба, которая наследуется от класса Service, будет работать в фоновом режиме не зависимо от того закончена ли операция ради которой она была запущена. Она остановится только когда вы явно вызовете метод stopSelf() для нее. Очень часто такие службы являются причиной быстрого разряда батареи вашего смартфона.
Внутри службы можно запускать несколько задач и выполнять их параллельно. Например, скачивать несколько mp3 файлов с интернета. Мы не знаем какая задача будет завершена первой, а какая — последней, поэтому контролировать процессы внутри службы нам помогает жизненный цикл компонента Service.
Проходит он так:
onCreate() -> onStartCommand() -> onDestroy()
Вызов onCreate() означает, что служба создана. После этого вызывается onStartCommand() , который свидетельствует о том, что служба начала работу в фоновом режиме. Именно в этом методе мы должны описать задачи, которые необходимо выполнить в компоненте Service. Вызов метода onDestroy() даст нам знать, что сервис уничтожен.
Пример создания Service в Android
Наже представлен просто пример работы сервиса:
Источник: javadevblog.com