Перемещение по классам без создания нового экземпляра - PullRequest
0 голосов
/ 22 апреля 2011

Кто-нибудь знает способ показать другой класс без создания нового экземпляра? С точки зрения управления памятью кажется немного сумасшедшим, что каждый раз, когда вы хотите отобразить другую форму / страницу, вам нужно использовать StartActivity, которая затем создает новые экземпляры класса вместо повторного использования ранее созданных экземпляров.

Заранее спасибо

Полагаю, из сказанного - нет реального способа сделать это, чтобы не помешать функциональности "Назад" ОС? Я создаю приложение, которое является линейным, за исключением того, что на каждом экране есть кнопка «Домой», которая затем позволяет отменить эту функциональность и завершить цикл - есть ли в любом случае способ уничтожить все виды и вернуться к главному учебный класс? (IE предотвращает утечку памяти из-за проблем, но также не наносит ущерба функциональности ОС)

Считайте это "чистой историей" без перезапуска приложения

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Не уверен, что это будет работать для Android (исходя из фона MS / C #), но концептуально один вариант - перебирать открытые формы, ища один с определенным дескриптором.Затем, как только вы найдете его, просто вызовите метод, чтобы показать эту форму.Это будет зависеть от наличия Java-эквивалента для свойства Application.OpenForms в .NET.

0 голосов
/ 22 апреля 2011

С точки зрения управления памятью кажется немного сумасшедшим, что каждый раз, когда вы хотите отобразить другую форму / страницу, вам нужно использовать 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 уничтожит недостаточно загруженные действия, соберет мусор и даже вернет эту память в ОС.

...