Что происходит, когда уже уничтоженная ОС активность отменяется пользователем из недавних приложений?

Насколько я знаю, приложение, которое уже уничтожено системой Android, находится в последних приложениях. Например, я запустил свое приложение и просмотрел несколько действий. Затем выйдите, откройте несколько других приложений и не запускайте мое приложение снова в течение нескольких часов. Моя последняя открытая активность останется в последних приложениях, даже если она была уничтожена системой. Мой вопрос заключается в том, какие методы жизненного цикла будут запускаться, когда я касаюсь своего приложения из списка последних приложений и в каком порядке? Кроме того, что произойдет с моими данными в активности, которая все еще отображается в последних приложениях? Он создается с самого начала? У меня все еще есть стек действий? и будет ли воссоздан мой базовый класс приложения?

0
0
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Согласно жизненному циклу активности, после того, как ваше приложение будет уничтожено ОС Android (чтобы получить память для более приоритетных приложений), ваша активность начнется с метода onCreate() и пройдет цикл, как обычно). Что насчет ваших данных? :

  1. значения в представлениях (например, EditText) будут восстановлены, если у вашего представления есть идентификаторы.
  2. ваши значения переменных я предлагаю вам сохранить и восстановить с помощью onSaveInstanceState() и onRestoreInstanceState().

хорошо, я отредактировал свой вопрос. Могу ли я получить данные из onRestoreInstanceState из уничтоженной активности? Будет ли мой базовый класс приложения воссоздан с самого начала. Что случилось с его переменными, они уже уничтожены?

Mehmet Katircioglu 11.04.2019 00:13

Могу ли я получить данные из onRestoreInstanceState из уничтоженной активности? - да! Будет ли мой базовый класс приложения воссоздан с самого начала? - да! Что случилось с его переменными, они уже уничтожены? - они будут уничтожены после того, как процесс вашего приложения будет убит, потому что, пока существуют ссылки на значения ваших переменных, они потребляют системную память, поэтому они будут убиты)

Alexander Gapanowich 11.04.2019 00:29

Но это должно означать, что данные, которые я сохраняю в saveInstanceState, остаются навсегда, даже если приложение уничтожено. Это немного странно для меня.

Mehmet Katircioglu 11.04.2019 00:39

Не документировано, как Android обрабатывает данные Bundle... Это все, чем я могу помочь )))

Alexander Gapanowich 11.04.2019 01:01

Спасибо, Александр, кажется, onSaveInstance сохраняет данные на диск, поэтому мои данные не хранятся в памяти навсегда, а остаются в кеше диска, тогда это имеет смысл. Я просто поместил команду Log в свою функцию onCreate класса Application, но она не срабатывает, когда мой процесс завершается через несколько часов, а мое приложение запускается через последние приложения. Единственное, что мне сейчас интересно, так это то, как ведет себя мой класс приложения. Я был бы рад, если бы вы могли обновить его в своем ответе

Mehmet Katircioglu 28.04.2019 17:37

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

Alexander Gapanowich 29.04.2019 21:40

Здесь есть два сценария: -

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

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

Как только вы нажмете кнопку «Домой», он вызовет onStop, не уничтожая его, если только ОС или пользователь не сделают этого.

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

Mehmet Katircioglu 11.04.2019 00:18

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

Mehmet Katircioglu 11.04.2019 00:21

@MehmetKatircioglu Ну, я тоже вас не понял, но я думаю, что у вас проблема с архитектурой / логикой вашего приложения.

Ibrahim Ali 11.04.2019 00:22

@MehmetKatircioglu Если вашему приложению нужно запуститься из активности запуска, вы можете очистить стек, который вызвал onStop, но это не удобно для пользователя, если он снова откроет ваше приложение и начнет с самого начала,

Ibrahim Ali 11.04.2019 00:25

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

Mehmet Katircioglu 11.04.2019 00:30

Другие вопросы по теме