Android: процесс и имя процесса - PullRequest
4 голосов
/ 03 апреля 2011

Я пытаюсь понять атрибут android:process. Ссылка говорит :

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

Будет ли создан процесс, если имя не начинается с двоеточия?Что если он начинается с заглавной буквы?И что произойдет, если я смешаю два правила?

Мне нужно, чтобы два компонента из двух пакетов запускались в одном и том же процессе для экономии ресурсов (и чтобы в диспетчере приложений не было двух «запущенных приложений»).Какое должно быть название моего процесса?Нужен ли глобальный процесс?

РЕДАКТИРОВАТЬ:

Я попытался с простым строчным именем (имя первого пакета), и кажется, что он работает так, как я хочу.Тем не менее, я думаю, что я не понимаю правил.

Ответы [ 2 ]

6 голосов
/ 03 апреля 2011

А что будет, если я смешаю два правила?

Это невозможно. Двоеточие не заглавная буква.

Мне нужно, чтобы два компонента из двух пакетов работали в одном и том же процессе, чтобы сэкономить ресурсы (и чтобы в диспетчере приложений не было двух «запущенных приложений»).

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

Вам не только придется возиться с android:process, но вы также должны возиться с android:sharedUserId. Ни один из них не предназначен для использования обычными разработчиками SDK, особенно android:sharedUserId. Фактически, если вы уже распространили свое приложение, вы не сможете использовать android:sharedUserId, если вы не захотите сломать все приложения ваших существующих пользователей, поскольку вы больше не сможете получить доступ к своему исходному данные, поскольку они будут принадлежать какой-либо другой учетной записи пользователя.

Кроме того, если у вас нет доказательств обратного, я бы не предположил, что это каким-то образом «позволит избежать двух« запущенных приложений », перечисленных в диспетчере приложений».

Теперь я за эффективность, поэтому создание дополнительных процессов для ухмылок (например, неверный совет по запуску «удаленных служб» в пользовательских процессах) - плохая идея. И если вы работаете на производителя устройств или фирму с более чем 20+ разработчиками Android или чем-то еще, и вы хотите возиться с этим, вам нужно будет найти места, где оно используется в AOSP, и перепроектировать информацию вы ищете, так как этот материал серьезно недокументирован. И даже там, я не вижу, чтобы он использовался между несколькими пакетами, за исключением android.process.acore и com.android.phone, которые являются серьезно низкоуровневыми процессами и не будут типичными для приложений без микропрограмм.

Следовательно, я действительно рекомендую вам оставить эти вещи в покое.

0 голосов
/ 03 апреля 2011

Полагаю, вы говорите о фоновых услугах, верно?Если вы запускаете службу без «:», служба запускает тот же процесс, что и ваше приложение, в этом случае она называется «локальной службой».Если вы запустите его с «:», он будет запущен в своем собственном процессе, называемом «удаленный сервис».В этом случае может использоваться другие действия.

По умолчанию Android создает процесс для приложения, когда должен запускаться первый из его компонентов.Все компоненты затем запускаются в этом процессе.Имя процесса по умолчанию совпадает с именем пакета, установленным элементом.

Кажется, вам не нужно указывать параметр android:process, за исключением того, что вы хотите указать имя процесса вашего приложения.И если вы хотите, чтобы какой-то компонент вашего приложения запускался в другом процессе, как я описал в приведенном выше примере службы.

Надеюсь, это немного поможет.nyyrikki

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...