Разъяснение активности Android при паузе и перезагрузке - PullRequest
2 голосов
/ 20 июня 2019

У меня вопрос по жизненному циклу активности в Android. Когда у меня есть такой код (с правильными именами)

 newActivityButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), NextActivity.class);
                intent.putExtra("Info",correctInfo);
                startActivity(intent);
            }
        });

Тогда «NextActivity» выходит на первый план. Но значит ли это, что «MainActivity» прекратилась? Согласно графику ниже, «MainActivity» больше не виден, поэтому он тоже остановился?

EDIT: А что, если у меня есть цепочка из 3 видов деятельности. Первый еще не уничтожен?

Activity lifecycle graph

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

MainActivity будет остановлено, как только оно станет невидимым, и на переднем плане появится другое действие.В случае, если цепочка действий запускается одна за другой, все будут в остановленном состоянии (если система не уничтожит действие для освобождения памяти и ресурсов).

0 голосов
/ 27 июня 2019

Пожалуйста, прочитайте эту статью о заднем стеке и управлении задачами

В андроиде действия или задачи (набор действий) расположены в стеке, известном как Обратный стек.

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

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

Для цепочки, скажем, у вас есть три действия,A, B и C. A запускает B, а B запускает C. Поэтому, когда C находится в фокусе, ваши действия A и B будут в остановленном состоянии (но все еще в заднем стеке).Вы можете нажать обратно на C и возобновить B, затем снова нажать на B и возобновить A. Как упоминалось выше, после нажатия кнопки назад текущая активность извлекается из стека и завершается.

С того же URLЯ поделился сверху:

Примечание. Несколько заданий можно одновременно выполнять в фоновом режиме.Однако, если пользователь запускает много фоновых задач одновременно, система может начать уничтожать фоновые операции для восстановления памяти, что приведет к потере состояний активности.

0 голосов
/ 20 июня 2019

Действия будут уничтожены только в том случае, если вы неявным образом завершите их с помощью finish() или связанных методов, или если по какой-либо необходимой причине в большинстве случаев, связанных с нехваткой памяти на вашем устройстве, система убивает их, когда онина заднем фоне.Если ничего из этого не происходит, ваши действия, которые идут в фоновом режиме, достигнут состояния onStop() их жизненного цикла, пока они снова не выйдут на передний план, как ясно показывает график.

Итак, отвечая на ваш вопрос,в случае, если у вас есть поток:

A -> B -> C, если вы не вызываете finish ни в одной из них, и система не прерывает какие-либо действия в фоновом режиме, A и B будутостановлен, но не уничтожен.

...