Я реализую панель управления и пользовательский интерфейс панели действий, например, в приложении Twitter:
Каждая кнопка на приборной панели переключает пользователя на другую активность. Некоторые из этих действий более важны, чем другие, и я мог представить себе, что пользователь переключается между ними через панель инструментов достаточно часто.
Я чувствую, что у меня есть два варианта:
Продолжайте цикл активности, используя флаги намерения, так что, когда пользователь вернется на панель управления, он просто подталкивает активность панели инструментов к вершине стека. Затем, когда пользователь возвращается к другому действию, он подталкивает его к вершине стека. Никакая активность не будет уничтожена до тех пор, пока ОС не сделает это, чтобы получить обратно память, и все будет хорошо.
Пусть действия будут уничтожены, когда пользователь вернется на панель инструментов, а затем воссоздается позже.
Какой вариант лучше с точки зрения производительности и передового опыта? Мне нравится вариант 1, но я не уверен, что я злоупотребляю целью этих флагов намерения. И если я поеду с вариантом 1, должен ли я также переопределить то, что делает кнопка "Назад", так что finish()
не вызывается?
Лично мне нравится первый вариант лучше. Таким образом, вы легко запомните состояние других действий, когда пользователь вернется к ним.
Например, если в дочернем действии пользователь прокручивает список, затем возвращается к панели управления, а затем возвращается к дочерней активности, позиция прокрутки будет там, где он оставил ее.
Что касается памяти, я не думаю, что это проблема. Например, возьмем компонент вкладки (который является параллельным навигационным контроллером на панели управления). С помощью элемента управления вкладкой все дочерние действия (действия с вкладками) также не уничтожаются.
Если память станет проблемой, я бы объединил ваши две идеи. Для менее важных действий я бы реализовал подход 2 (уничтожить их на обратной стороне), а для более важных действий (где состояние важно для пользователя, например), я бы реализовал подход 1.