android - или - tag fragment




Дилемма: когда использовать Fragments vs Activities: (9)

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

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

Помните: следует ли использовать фрагменты? Почему я не должен?

С уважением.

Я знаю, что Activities предназначены для представления одного экрана моего приложения, в то время как Fragments предназначены для многократного использования макетов UI с встроенной в них логикой.

До недавнего времени я разработал приложение, в котором говорилось, что они должны быть разработаны. Я создал Activity для представления экрана моего приложения и использовал фрагменты для ViewPager или Google Maps . Я редко создавал ListFragment или другой пользовательский интерфейс, который можно повторно использовать несколько раз.

Недавно я наткнулся на проект, который содержит только 2 Activities один из которых - это SettingsActivity а другой - MainActivity . Макет MainActivity заполнен множеством скрытых полноэкранных фрагментов пользовательского интерфейса, и отображается только одно. В логике Acitivty существует множество FragmentTransitions между различными экранами приложения.

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

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

ОБНОВЛЕНИЕ (01.05.2014): После этой презентации Эрика Берка из Square (я должен сказать, это отличная презентация с множеством полезных инструментов для разработчиков Android. И я никоим образом не связан с Square)

http://www.infoq.com/presentations/Android-Design/

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


Моя философия такова:

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

Переходы активности дороги, не так ли? По крайней мере, я так считаю - поскольку старая активность, которая должна быть уничтожена / приостановлена ​​/ остановлена, помещена в стек, а затем необходимо создать / запустить / возобновить новое действие.

Это только моя философия, так как были введены фрагменты.


Ну, в соответствии с лекциями Google (может быть, here я не помню), вам следует рассмотреть возможность использования фрагментов, когда это возможно, так как это упрощает управление вашим кодом и контроль.

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

Я думаю, вы должны сами решить, что лучше для вас. Обычно не так сложно преобразовать активность в фрагмент и наоборот.

Здесь я написал сообщение об этой диллеме, если вы хотите прочитать еще кое-что.


Одним большим преимуществом fragment над активностью является то, что код, который используется для фрагмента, может использоваться для разных видов деятельности. Также он обеспечивает повторное использование кода при разработке приложений.


Почему я предпочитаю Fragment over Activity во ВСЕХ СЛУЧАЕ.

  • Активность дорогая. Во Фрагменте представления и состояния свойств разделяются - всякий раз, когда фрагмент находится в backstack , его представления будут уничтожены. Таким образом, вы можете складывать гораздо больше фрагментов, чем Activity.

  • Backstack . С помощью FragmentManager легко удалить все фрагменты, вставить больше, чем на фрагменты и т. Д. Но для деятельности это будет кошмар, чтобы манипулировать этими вещами.

  • Очень предсказуемый жизненный цикл . Пока хост-активность не перерабатывается. Фрагменты в стопке не будут переработаны. Таким образом, можно использовать FragmentManager::getFragments() чтобы найти определенный фрагмент (не рекомендуется).


Что я делал: используя меньше фрагментов, когда это возможно. К сожалению, это практически возможно. Итак, у меня много фрагментов и немного действий. Некоторые недостатки, которые я понял:

  • ActionBar & Menu: если у 2 фрагмента есть другое название, меню, это
    будет трудно справиться. Пример: при добавлении нового фрагмента вы можете изменить заголовок панели действий, но когда поп его из backstack нет способа восстановить старый заголовок. Возможно, вам понадобится панель инструментов в каждом фрагменте для этого случая, но позвольте мне поверить, что у вас будет больше времени.
  • Когда нам нужно startForResult , активность имеет, но фрагмент не имеет.
  • Не используйте анимацию перехода по умолчанию

Моим решением для этого является использование Activity для обертки фрагмента внутри. Итак, у нас есть отдельная панель действий, меню, startActivityForResult , анимация, ...


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

** Начать новую деятельность только в том случае, если имеет смысл иметь основное действие, и это открывается одновременно (подумайте о нескольких окнах).

Отличным примером того, когда имеет смысл заниматься несколькими действиями, является Google Диск. Основное действие предоставляет файловый проводник. Когда файл открывается, для просмотра этого файла запускается новое действие. Вы можете нажать кнопку последних приложений, которая позволит вам вернуться в браузер без закрытия открытого документа, а затем, возможно, даже открыть другой документ параллельно с первым.


Это зависит от того, что вы хотите построить на самом деле. Например, в navigation drawer используются фрагменты. Вкладки также используют fragments . Другая хорошая реализация - это то, где у вас есть список. Когда вы поворачиваете телефон и щелкаете по строке, активность отображается в оставшейся половине экрана. Лично я использую fragments и fragment dialogs , поскольку они более профессиональны. Кроме того, они легче обрабатываются во вращении.


используйте одну активность для каждого приложения, чтобы предоставить основание для fragment использующего fragment для экрана, fragments - это легкий вес по сравнению с фрагментами activites которые являются многократно используемыми фрагментами, лучше подходят для приложения, которое поддерживает как телефон, так и планшет





architecture