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




activity view (12)

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

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

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

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

Я знаю, что 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 не применима для всех ситуаций, потому что она создает беспорядок в том, что он называет деятельностью «Бога».


Эксперты скажут вам: «Когда я увижу пользовательский интерфейс, я буду знать, использовать ли действие или Fragment ». В начале это не имеет никакого смысла, но со временем вы действительно сможете сказать, нужен ли вам Fragment или нет.

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

А именно, представьте себе окно, которое представляет собой экран. Можете ли вы загрузить в этом окне другой экран? Если вы используете новый флажок, вам нужно будет скопировать несколько элементов из 1-го окна? Если ответ «Да», тогда вы должны использовать Fragments , потому что корневая Activity может содержать все дублированные элементы, чтобы сэкономить ваше время при их создании, и вы можете просто заменить части окна.

Но не забывайте, что вам всегда нужен контейнер с коробкой ( Activity ), или ваши части будут разбросаны. Итак, одна коробка с частями внутри.

Старайтесь не злоупотреблять коробкой. Эксперты Android UX советуют (вы можете найти их на YouTube), когда мы должны явно загружать другое действие, вместо этого использовать Fragment (например, когда мы имеем дело с ящиком навигации, который имеет категории). Как только вы почувствуете себя комфортно с Fragments , вы сможете посмотреть все их видео. Более того, они являются обязательным материалом.

Можете ли вы сейчас взглянуть на свой пользовательский интерфейс и выяснить, нужна ли вам Activity или Fragment ? Вы получили новую перспективу? Думаю, что да.


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

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

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


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


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


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

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

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

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


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

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

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

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


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


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

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

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

С уважением.


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


По-моему, это не очень актуально. Ключевым фактором, который следует учитывать, является

  1. как часто вы собираетесь повторно использовать части пользовательского интерфейса (например, меню),
  2. это приложение также для планшетов?

Основное использование фрагментов - это создание многопользовательской активности, что делает ее идеальной для приложений с поддержкой Tablet / Phone.


Ссылаясь на первый вопрос «Есть ли причина разделить телефонное приложение на многие виды деятельности?» - Да. он просто сводится к доступному пространству, планшет дает больше возможностей для разработчиков, что позволяет разработчикам размещать больше на одном экране. Android сообщает нам, что Activities может предоставить экран . Итак, что вы можете сделать с одним большим экраном на планшете, это то, что может быть распространено на нескольких экранах на телефоне, потому что для всех фрагментов недостаточно места.





android android-fragments android-activity architecture