Отдельная деятельность, несколько фрагментов / отдельные действия в многоступенчатом потоке? - PullRequest
0 голосов
/ 19 апреля 2019

Я занимаюсь разработкой Android в течение 3 лет, и это все еще трудно решить, когда дело доходит до аналогичного сценария.В настоящее время я считаю, что большинство приложений имеют многоэтапный экран / поток.

Например, поток бронирования.Вам необходимо выполнить несколько шагов, таких как выбрать билет, выбрать место, выбрать информацию о продукте, а затем ввести личные данные.Для каждого шага могут потребоваться данные из предыдущего шага.

Я провел много исследований по этому вопросу и прочитал много сообщений из reddit и SO, но все еще не пришел к выводу.

Google сказал нам использовать фрагменты для гибкого интерфейса, а Джейк Уортон также отметил, что «Вы можете использовать фрагмент, но не используйте его backstack».

Должен ли я использовать одну операцию с несколькими фрагментами в качестве шаговили отдельные действия, причем каждое действие представляет собой шаг?

В настоящее время я использую первый подход, добавляя фрагмент в backstack и восстанавливая их состояние данных при извлечении (пользователь нажимает назад).Тем не менее, мне нужно установить 'freezesText' для всех текстовых представлений и убедиться, что адаптер для повторного просмотра находится во фрагменте onCreate, чтобы сохранить его состояние.Возможно, будет еще больше неприятностей.

Я даже написал собственный контейнер / менеджер фрагментов для беспрепятственного обслуживания своих фрагментов.

https://github.com/Veeyikpong/easyfragmentcontainer/blob/master/src/main/java/com/veeyikpong/easyfragmentcontainer/FragmentContainer.kt

Я вижу много источников, упоминающих эту деятельностьпереходы дороже.Таким образом, я написал два приложения, имитирующих сценарий для сравнения производительности.Оба приложения обслуживали один и тот же экран и результат, разработанный с использованием MVP arch.Эти приложения загружают новости в список, и вы можете нажать их, чтобы просмотреть детали.

Одиночное действие с двумя фрагментами: https://github.com/Veeyikpong/fastNewsFragment

Отдельные действия: https://github.com/Veeyikpong/fastNewsActivity

Я сравнил их с профилировщиком Android Studio, заметил, что они не сильно отличаются по потреблению памяти, но у отдельного приложения действий меньший размер кода (10216 КБ), а у приложения с фрагментами - 14 000 КБ.

FastNewsActivity FastNewsActivity

FastNewsFragment FastNewsFragment

На основании теста я не заметил большого различиямежду ними, и, конечно, развиваться с помощью просто деятельности гораздо быстрее.Я делаю тест неправильно?Пожалуйста, советуйте по этому сценарию.

Или я должен попробовать новый компонент навигации от Google?Говорят, он справится со сложностью FragmentTransactions для вас.

1 Ответ

0 голосов
/ 19 апреля 2019

Я бы предложил вам использовать разные виды деятельности для разных функций.В вашем примере процесса бронирования -> выберите билет, выберите место, выберите сведения о продукте, затем введите персональные данные

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

Если бы вы использовали одно действие и фрагменты в заднем стеке, через некоторое время стало бы очень очень сложно управлять жизненным циклом ипоток данных.

Но рассмотрим функцию входа в систему с помощью кнопки пользователя и пароля.Существует возможность использования этой функции во многих местах.Ex.Пользователь может войти в систему с экрана входа в систему или он может войти во время оплаты или даже когда пользователь вводит свои данные.Это идеальный случай для фрагмента (используйте код один раз и используйте во многих местах).

Надеюсь, что это имеет смысл .:)

...