Разница между задачей и процессом в Android

Я немного смущен различием между задачей и процессом в Android.

Если я правильно понимаю, задача – всего лишь стопка действий. Из того, что я читал до сих пор, я думаю, что задача может выглядеть так:

| Activity A running in Process P1 | | Activity B running in Process P2 | | Activity C running in Process P3 | 

Таким образом, основные действия из разных процессов могут содержаться в одном стеке. Я прав?

Другой вопрос : каков реальный смысл «контекста приложения»? Процесс или задача?

И последний вопрос : класс приложения (который в основном одноэлементный) представляет собой процесс или задачу?

Solutions Collecting From Web of "Разница между задачей и процессом в Android"

Все, что я когда-либо узнал об этом, я узнал на этой странице.

Редактирование : Я также просто наткнулся на Руководства по разработке действий и задач. Это похоже на точную тему, о которой вы просили. Я многому научился 🙂

Таким образом, основные действия из разных процессов могут содержаться в одном стеке. Я прав?

Основываясь на моем понимании, вы правы. Я понимаю, что Процессы являются единицами фактического исполнения, а Задачи – об объединении, чтобы добиться результата. В качестве примера на вышеупомянутой странице, если вы создаете намерение, которое открывает веб-страницу, создаваемая ею деятельность создается в процессе веб-браузеров, но связана с вашими задачами приложений. Таким образом, задача становится виртуальным стеком операций, выполняющихся на разных процессах, в зависимости от приложения, которое предоставило Activity.


Другой вопрос: каков реальный смысл «контекста приложения»? Процесс или задача?

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

Обычно в процесс приложения, который его определил, запускается новый экземпляр действия, поэтому все экземпляры активности выполняются в одном процессе


И последний вопрос: класс приложения (который в основном одноэлементный) представляет собой процесс или задачу?

С той же интерпретацией, что и выше, мое предположение о том, почему объект приложения представляет Singleton, состоит в том, что все ваши действия приложений запускаются на одном процессе и этот процесс привязан к Приложению. Я не знаю, что это точка проектирования, но, по-видимому, это следствие, как следствие, текущего дизайна.

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

Элемент манифеста имеет атрибут android: процесс с описанием следующим образом:

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

Важное замечание разработчика Android :

Распространенным недоразумением в отношении многозадачности Android является разница между процессом и приложением. В Android это не тесно связанные объекты: приложения могут показаться пользователю без реального процесса, запускаемого в настоящее время в приложении; Несколько приложений могут совместно использовать процессы, или одно приложение может использовать несколько процессов в зависимости от его потребностей; Процесс (ы) приложения может поддерживаться Android даже тогда, когда это приложение не активно что-то делает.

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

Для подробного процесса: http://developer.android.com/guide/components/processes-and-threads.html

Задачи. Задача – это совокупность действий, с которыми пользователи взаимодействуют при выполнении определенной работы. Действия расположены в стеке («задний стек») в порядке, в котором каждая активность открывается. Активность может даже запускать действия, которые существуют в других приложениях на устройстве. Например, если ваше приложение хочет отправить электронное письмо, вы можете определить намерение выполнить действие «отправить» и включить некоторые данные, такие как адрес электронной почты и сообщение. Затем открывается действие из другого приложения, которое объявляет себя для обработки такого намерения. В этом случае цель состоит в том, чтобы отправить электронное письмо, поэтому начинает действовать «составная» активность приложения электронной почты (если несколько действий поддерживают одно и то же намерение, система позволяет пользователю выбрать, какой из них использовать). Когда отправляется электронное письмо, ваша деятельность возобновляется, и кажется, что активность электронной почты была частью вашего приложения. Несмотря на то, что эти действия могут выполняться из разных приложений, Android поддерживает этот беспрепятственный пользовательский интерфейс, сохраняя оба действия в одной и той же задаче.

Для подробной задачи – http://developer.android.com/guide/components/tasks-and-back-stack.html