С точки зрения управления памятью кажется немного сумасшедшим, что каждый раз, когда вы хотите отобразить другую форму / страницу, вам нужно использовать StartActivity, которая затем создает новые экземпляры класса вместо повторного использования ранее созданных экземпляров.
Тактически, вы можете добавить FLAG_REORDER_TO_FRONT
, чтобы вернуть существующую деятельность на передний план, если вы понимаете последствия с точки зрения навигации.
Однако ваш вопрос довольно любопытен. Как вы получаете доступ к StackOverflow?
Очевидно, что это не через веб-браузер. Веб-браузеры используют именно тот механизм, который вы считаете «сумасшедшим», отображая веб-страницы, даже если эта веб-страница была просмотрена ранее. Они занимаются этим уже более 15 лет, и у нас все хорошо.
Модель навигации Android разработана так, чтобы приблизительно отражать веб-навигацию:
- Пользователи нажимают на вещи, чтобы двигаться вперед
- Пользователи нажимают кнопку НАЗАД, чтобы перейти к предыдущему элементу, на который они смотрели
- Пользователи нажимают кнопку HOME, когда хотят переключиться на какую-то другую важную вещь, чтобы посмотреть на
Путем «повторного использования ранее созданных экземпляров» вы обходите эту навигационную модель. Например, предположим, что ваш стек активности был A-B-C-D, и вы звоните startActivity()
с Intent
для B и FLAG_REORDER_TO_FRONT
. Теперь стек активности A-C-D-B. Когда пользователь нажимает BACK раз, он больше не находится на том B, на который смотрел изначально, а вернулся на A. В браузере это было бы довольно странным поведением.
Есть другие флаги на Intent
или атрибуты на <activity>
в манифесте, которые предлагают "повторное использование ранее созданных экземпляров". Однако их нет «с точки зрения управления памятью». Они там, где традиционный шаблон Web BACK не соответствует вашим потребностям.
Если вы никуда не напортачите, Android уничтожит недостаточно загруженные действия, соберет мусор и даже вернет эту память в ОС.