Насколько я знаю, приложение, которое уже уничтожено системой Android, находится в последних приложениях. Например, я запустил свое приложение и просмотрел несколько действий. Затем выйдите, откройте несколько других приложений и не запускайте мое приложение снова в течение нескольких часов. Моя последняя открытая активность останется в последних приложениях, даже если она была уничтожена системой. Мой вопрос заключается в том, какие методы жизненного цикла будут запускаться, когда я касаюсь своего приложения из списка последних приложений и в каком порядке? Кроме того, что произойдет с моими данными в активности, которая все еще отображается в последних приложениях? Он создается с самого начала? У меня все еще есть стек действий? и будет ли воссоздан мой базовый класс приложения?
Согласно жизненному циклу активности, после того, как ваше приложение будет уничтожено ОС Android (чтобы получить память для более приоритетных приложений), ваша активность начнется с метода onCreate() и пройдет цикл, как обычно). Что насчет ваших данных? :
Могу ли я получить данные из onRestoreInstanceState из уничтоженной активности? - да! Будет ли мой базовый класс приложения воссоздан с самого начала? - да! Что случилось с его переменными, они уже уничтожены? - они будут уничтожены после того, как процесс вашего приложения будет убит, потому что, пока существуют ссылки на значения ваших переменных, они потребляют системную память, поэтому они будут убиты)
Но это должно означать, что данные, которые я сохраняю в saveInstanceState, остаются навсегда, даже если приложение уничтожено. Это немного странно для меня.
Не документировано, как Android обрабатывает данные Bundle... Это все, чем я могу помочь )))
Спасибо, Александр, кажется, onSaveInstance сохраняет данные на диск, поэтому мои данные не хранятся в памяти навсегда, а остаются в кеше диска, тогда это имеет смысл. Я просто поместил команду Log в свою функцию onCreate класса Application, но она не срабатывает, когда мой процесс завершается через несколько часов, а мое приложение запускается через последние приложения. Единственное, что мне сейчас интересно, так это то, как ведет себя мой класс приложения. Я был бы рад, если бы вы могли обновить его в своем ответе
Так. по схеме жизненного цикла андроида ваш процесс не был убит, если у вас нет логов от метода onCreate(). Похоже, ваше приложение просто восстанавливается из заднего стека. Я предлагаю вам поместить логи в метод onRestart() и посмотреть. Если вы получите журналы, значит, ваше приложение просто восстанавливается. Извините, но нет способа поймать, если ваш процесс приложения был убит...
Здесь есть два сценария: -
Если ваше приложение все еще находится в последних приложениях много времени, а другим приложениям требуется память, ваше приложение будет уничтожено ОС Android, и если вы откроете его снова, оно начнется с заставки.
Если ваше приложение пробыло некоторое время в недавних приложениях без потребности в памяти, будет открыто последнее использованное вами действие, начиная его жизненный цикл с onStart()
.
Как только вы нажмете кнопку «Домой», он вызовет onStop
, не уничтожая его, если только ОС или пользователь не сделают этого.
Спасибо, Ибрагим, происходит то, что последнее открытое действие открывается снова. У меня нет заставки. У меня есть поток задач, который начинается с моей активности запуска. Но когда приложение уничтожается ОС, а затем некоторые дальнейшие действия моего приложения вызываются через последние приложения, поскольку моя активность запуска не вызывается, мои задачи не запускаются.
Вероятно, мне придется рассмотреть сценарий, при котором мое приложение не всегда будет запускаться с моей активности запуска.
@MehmetKatircioglu Ну, я тоже вас не понял, но я думаю, что у вас проблема с архитектурой / логикой вашего приложения.
@MehmetKatircioglu Если вашему приложению нужно запуститься из активности запуска, вы можете очистить стек, который вызвал onStop
, но это не удобно для пользователя, если он снова откроет ваше приложение и начнет с самого начала,
Пока живо мое базовое приложение, мне не нужно такое поведение, потому что переменные, которые я получил из задач, хранятся в объектах, на которые ссылается класс приложения. Когда пользователь уничтожит приложение по своей воле и снова запустит приложение, моя последовательность операций снова заработает. Вызов некоторой промежуточной активности из последних приложений - единственное условие, с которым я сталкиваюсь.
хорошо, я отредактировал свой вопрос. Могу ли я получить данные из onRestoreInstanceState из уничтоженной активности? Будет ли мой базовый класс приложения воссоздан с самого начала. Что случилось с его переменными, они уже уничтожены?