Концепция служб поддерживается в Android по двум причинам.
• Во-первых, чтобы упростить реализацию фоновых задач.
• Во-вторых, чтобы сделать возможным взаимодействие между процессами в приложениях, выполняющихся на одном устройстве.
Эти две причины соответствуют двум типам служб, поддерживаемых в Android: локальным и удаленным. Примером первого случая может быть локальная служба, реализованная как часть почтового приложения. Служба может обрабатывать отправку сообщений электронной почты почтовому серверу. Поскольку это требует некоторого времени на завершение, служба является подходящим вариантом размещения подобной функциональности, так что главный поток может обратиться к ней и вернуться к взаимодействию с пользователем. Вдобавок, даже когда активность, связанная с электронной почтой, становится недоступной, все равно необходимо, чтобы отправленные сообщения были доставлены. Как вы увидите позже, примером второго случая может быть приложение для перевода на другие языки. Предположим, что на устройстве функционирует несколько приложений, и требуется служба, которая бы принимала текст для перевода с одного языка на другой. Вместо повторения одной и той же логики в каждом приложении можно написать удаленную службу перевода и обеспечить взаимодействие с ней в коде приложений.
Между локальными и удаленными службами существуют некоторые важные отличия. В частности, если служба используется строго компонентами в одном и том же процессе, клиенты должны запускать службу вызовом Context .startService(). Такая служба является локальной, поскольку ее назначение в общем случае — запуск фоновых задач для приложения, в котором она размещена. Если служба поддерживает метод onBind(), она является удаленной и может быть вызвана через взаимодействие между процессами (Context.bindService()). Удаленные службы также называют службами, поддерживающими AIDL, т.к. клиенты работают с ними с использованием AIDL.
Несмотря на то что интерфейс android.app.Service поддерживает и локальные, и удаленные службы, не следует предоставлять одну реализацию для обоих типов служб. Причина в том, что каждый тип имеет предопределенный жизненный цикл, и смешивание двух типов, хотя и разрешено, но может привести к возникновению ошибок.
Теперь можно приступать к детальным исследованиям двух типов служб. Мы начнем с локальных служб, а затем перейдем к удаленным службам (службам, поддерживающим AIDL). Как упоминалось ранее, локальные службы вызываются только приложением, в котором они размещены. Удаленные службы поддерживают механизм вызова удаленных процедур (remote procedure call — RPC). Этот тип позволяет внешним клиентам на одном и том же устройстве подключаться к службам и пользоваться их возможностями.
На заметку! Службы второго типа в Android известны под несколькими названиями: удаленные службы; службы, поддерживающие AIDL; службы AIDL; внешние службы; службы RPC. Все эти термины относятся к службам, которые могут быть доступны другим приложениям, функционирующим на устройстве.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.