У меня вопрос, который может выглядеть академическим, но на практике я столкнулся. Давайте добавим приложение, состоящее из двух действий A
(root) и B
.начало/остановка андроидной активности
A
->startActivity(A.this, B.class)
->B
->finish()
->A
Я добавил Войдите сообщение для onStart()
и onStop()
методов их. Когда я вернулся из B
к A
с помощью finish()
я получаю:
05-29 18: 48: 03,559: D/MyLog (7075): А начинает
05-29 18: 48: 03.919: D/MyLog (7075): B останавливается
Как вы можете видеть, интервал между А начинается и B останавливается на 360 мс. Но этот интервал может быть сколь угодно большим. У меня есть приложение, где этот интервал составляет около 10 секунд. Поэтому у меня есть временной интервал, когда A
активен, а B
умирает, но все еще жив. Что произойдет, если (в интервале) я снова запустил B
, используя startActivity(A.this, B.class)
?
Моя реальная ситуация еще сложнее, потому что B
является NativeActivity
для игры OpenGL, и мое приложение просто падает с кодом C++, потому что игра не ожидает перезапуска перед ее завершением.
В любом случае, сначала я хотел бы знать, что Android-гуру думает о моем основном вопросе, а именно: что происходит, когда вы пытаетесь начать «умирающую» деятельность?
Пожалуйста, не то, чтобы ваша деятельность не была убита. Он приостановлен (и может быть уничтожен, если Android нуждается в ресурсах). Поэтому запуск его снова приведет к вызову onResume на B – RvdK
Самый простой способ узнать ... просто попробуйте. Изучение на практике всегда хорошо –
Я ожидаю, что 'Activity B' будет снова создан, так как это было' finish() 'ed, но, возможно, это не так. Возможно, решение вашей проблемы - начать очистку ваших родных ресурсов в onStop(), так как это гарантировано будет вызвано, когда другое действие фокусируется на экране. – Karakuri