2013-06-07 2 views
10

Когда я прочитал официальный документ Android, я заметил, что система Android управляет действиями по задаче, но также использует задний стек для управления последовательностью действий. Поэтому я сомневаюсь, что система андроида использует один задний стек для контроля последовательности действий или каждой задачи, соответствующей заднему стеку?Какова взаимосвязь между стеком «Задача» и «Назад»

+0

Я имею в виду, что вся последовательность действий в системе андроидов управляется одним стеклом или действиями в каждой задаче, соответствующей заднему стеку? – CrystalJake

ответ

17

Задача - это просто сбор всех созданных вами действий приложения.

Например:

Если мы приложение А с деятельностью А1, А2 и А3 и А2 открывается после A1 и A3 открываются после A2, задача для приложения будет выглядеть следующим образом:

|A3| 
|A2| 
|A1| 

Теперь, если мы нажмем кнопку «Назад», A3 выскочит, и пользователю откроется A2. Задача для приложения будет выглядеть следующим образом:

|A2| 
|A1| 

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

Теперь давайте снова откроем A1, A2 и A3 в том же порядке. Задача приложения является в настоящее время назад:

|A3| 
|A2| 
|A1| 

Теперь предположит, что мы нажимаем на кнопку домой и запустить другое приложение, Приложение B. Это заставит всю задачу приложения к быть сохранено в фоновом режиме и новая задача создана для приложения B с его основной деятельностью. Итак, теперь мы имеем ситуацию, которая выглядит следующим образом:

Application A  Application B 
    |A3|     |B1| 
    |A2| 
    |A1| 

Если мы открываем больше мероприятий в заявке B, они будут добавлены в это задание так же, как Application A:

Application A  Application B 
    |A3|     |B3| 
    |A2|     |B2| 
    |A1|     |B1| 

Теперь, если мы вернитесь к Application A, мы поставим задачу A на передний план, и задача B будет сохранена в фоновом режиме.

Несколько экземпляров одного и того же действия могут также существовать в одной и той же задаче. Это поведение can be controlled.

Если система исчерпала память, она начнет убивать действия в фоновом режиме. Если все действия задачи исчезнут, задача также будет уничтожена. (ОБНОВЛЕНИЕ: Согласно this answer Dianne Hackborn, это не отдельные действия, а весь процесс, который содержит их, которые отбрасываются. Документы могут быть немного обманчивыми в этом отношении, и путаница еще предстоит решить. я обнов его, когда получу более полную информацию.)

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

Официальных документов дает гораздо больше информации, и я рекомендую их чтение:

http://developer.android.com/guide/components/tasks-and-back-stack.html

+1

Только одна коррекция - есть некоторая путаница в этом, но кажется, что это не _activities_, который убивается, когда память становится низкой; это целый _process_. Ссылка: [Этот пост] (http://commonsware.com/blog/2011/10/03/activities-not-destroyed-to-free-heap-space.html) в блоге Commonsware – curioustechizen

+1

@curioustechizen Да, документы являются бит нечеткие/вводящие в заблуждение в этом отношении. –

+0

Привет, хороший ответ. Но у меня есть один вопрос: во время переключения между различными задачами, как насчет «заднего стека»? Существует ли «задний стек» для каждой задачи или для всей структуры Android? – hguser

0

Я не совсем понимаю, к чему вы пытаетесь добраться, но действия в системе управляются как стек . Когда начинается новое действие, оно помещается в верхнюю часть стека и становится бегущей активностью. Предыдущее действие всегда остается ниже его в стеке и не будет возвращаться на передний план до тех пор, пока не будет завершено новое действие.

+0

Я хочу выразить следующее: только один задний стек в системе Android или счетчик обратных стеков равны количеству заданий? Задача - это набор действий, с которыми пользователи взаимодействуют при выполнении определенной работы. – CrystalJake

2

андроида официального документ гласит,

Задача представляет собой набор действий, которые пользователи взаимодействуют с когда выполняет определенную работу. Действия расположены в стеке ( «задний стек»), в том порядке, в котором каждое действие открывается.

Я согласен, что это довольно запутанно. Однако, читая весь документ снова и снова, становится ясно.

Задача управляет действиями, используя задний стек. Каждая задача имеет свой собственный задний стек в дополнение к некоторой другой информации и/или данным. Задача управляет действиями, использующими его задний стек.

Пожалуйста, исправьте меня, если я ошибаюсь.

0

Целевой является коллекцией деятельности и использует Назад Stack организовать их (мероприятия) с порядком, в котором они были открыты.

Каждый Application использует свою собственную задачу и эта задача использует собственную Назад Stack.

Смежные вопросы