Как создать активность и службу Android, которые используют отдельные процессы

У меня есть приложение для Android, состоящее из активности и службы. В настоящее время они оба существуют в одном процессе и используют одну и ту же кучу, но мне нужно отделить процесс/кучу для службы. То есть. Я хочу, чтобы служба полностью не зависела от активности, так что если сбой активности, это не повлияет на службу. Однако я хочу, чтобы они были установлены как одно приложение. Возможно ли это?

Ответы

Ответ 1

Определенно возможно. См. Атрибут process для service в AndroidManifest.xml

http://developer.android.com/guide/topics/manifest/service-element.html

Цитата:

Название процесса, в котором должна выполняться служба. Обычно все компоненты приложения запускаются в процессе по умолчанию, созданном для приложения. Он имеет то же имя, что и пакет приложений. Атрибут процесса элемента может устанавливать разные значения по умолчанию для всех компонентов. Но компонент может переопределять значение по умолчанию со своим собственным атрибутом процесса, что позволяет распространять ваше приложение на нескольких процессах.

Если имя, присвоенное этому атрибуту, начинается с двоеточия (':'), новый процесс, частный для приложения, создается, когда это необходимо, и служба запускается в этом процессе. Если имя процесса начинается с символа в нижнем регистре, служба будет выполняться в глобальном процессе этого имени при условии, что у него есть разрешение на это. Это позволяет компонентам в разных приложениях совместно использовать процесс, уменьшая использование ресурсов.

Ответ 2

IPC для сервисов IMHO требуется только в том случае, если услуга должна потребляться другими приложениями.

Запуск службы в своем собственном процессе имеет небольшие преимущества, которые сборщик мусора для службы не влияет на ваше приложение и что объем памяти для службы немного меньше, если он работает один.

Если потребление услуги другими приложениями не является обязательным условием для вас, предпочитайте локальную услугу. В качестве альтернативы вы все равно можете запустить службу в своем собственном процессе и использовать другую связь с вашим приложением, например. через широковещательный приемник. Я попытался описать различные подходы в своем учебнике по сервисам Android по следующей ссылке: Деятельность и коммуникация служб.