Когда пользователь взаимодействует с приложением на устройстве Android, он почти всегда взаимодействует с Activity
, единственным сфокусированным экраном на устройстве. После того, как Google выпустил версию Android с Fragment
интерфейсом, в операционную систему были добавлены объекты Fragment
чтобы упростить повторное использование кода и изменение содержимого на экране без необходимости каждый раз уничтожать / перестраивать новую Activity
.
В этом руководстве вы узнаете больше об объектах Activity
и Fragment
в Android, их жизненных циклах, а также о том, когда и как их следует использовать в своих собственных приложениях.
Тебе легче учиться с видео? Почему бы не проверить наш курс:
1. Деятельность
Действия являются ключевой частью экосистемы Android и одной из первых концепций, которые вам необходимо осознать, когда вы лучше познакомитесь с разработкой Android. Действия действуют как один экран, который отображается пользователю, и они часто инкапсулируют большую часть логики вашей программы.
Когда у вас есть созданный класс Activity
, вручную или с помощью одного из шаблонов Android Studio, вам необходимо определить его в файле AndroidManifest.xml проекта, если он еще не был добавлен, например:
1
2
3
4
5
6
7
|
<activity android:name=».MainActivity»>
<intent-filter>
<action android:name=»android.intent.action.MAIN» />
<category android:name=»android.intent.category.LAUNCHER» />
</intent-filter>
</activity>
|
В приведенном выше фрагменте вы также заметили тег intent-filter
с элементом action
и category
. Хотя подробное описание этих элементов выходит за рамки данного учебного пособия, вы должны знать, что из этих дополнительных строк система узнает, какую Activity
сначала нужно открыть, когда пользователь выбирает ваше приложение.
Создав действие, вы, вероятно, захотите связать его с файлом XML макета, чтобы вы могли легко использовать просмотр объектов из макета. Вы можете сделать это в onCreate()
.
1
2
3
4
5
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
|
После вызова setContentView()
вы можете начать ссылаться на объекты View
из XML-файла макета.
Жизненный цикл деятельности
В этот момент вы, вероятно, задаетесь вопросом, что такое onCreate()
и почему мы его используем. Метод onCreate()
является одним из методов, связанных с жизненным циклом Activity
. Он вызывается при первом создании Activity
. Здесь вы можете выполнить некоторые из ваших общих шагов инициализации в вашей Activity
поскольку она гарантированно будет вызвана первой в жизненном цикле Activity
как вы можете видеть ниже.
Приведенная выше диаграмма показывает порядок методов, вызываемых как Activity
покидают или входят в различные возможные состояния:
-
onCreate()
вызывается немедленно, когдаActivity
, как следует из названия, создается.onDestroy()
соотносится с противоположной операцией и вызывается, когда действие удаляется из памяти устройства. Есть несколько небольших случаев, когдаonDestroy()
может не вызываться, но они выходят за рамки этого руководства. -
onStart()
вызывается, когдаActivity
становится видимым для пользователя, аonStop()
вызывается, когда этаActivity
больше не видна. Эти два могут быть вызваны, когда приложение помещается в фоновый режим с помощью кнопки «Домой» на устройстве и когда приложение возвращается на передний план. -
onResume()
иonPause()
связаны с тем, чтоActivity
находится на переднем плане. Если другой компонент выходит на передний план, такой как диалог или другое действие, то эта часть жизненного цикла запускается.
Понимание того, когда каждый из этих методов вызывается, избавит вас от многих головных болей по мере разработки, и вам придется разрушать / перераспределять ресурсы в своих приложениях.
Обработка изменений конфигурации
Теперь, когда вы немного узнали о жизненном цикле действия, пришло время разобраться с тем, что происходит, когда действие уничтожается и воссоздается системой. Это может произойти в нескольких ситуациях, наиболее распространенных при повороте экрана.
Действие проходит стандартный процесс onStop()
, onPause()
, onDestroy()
, а затем onCreate()
при создании нового экземпляра этого Activity
.
Другой метод, который не показан на диаграмме выше, это onSaveInstanceState()
. Этот метод вызывается, поскольку действие уничтожается и позволяет сохранять простую информацию в комплекте. Когда onCreate()
вызывается снова, вы можете извлечь ту информацию, которую вы сохранили ранее. То же самое можно сделать из onRestoreInstanceState()
.
2. Фрагменты
Представленные в Android 3.0 (Honeycomb), объекты Fragment
представляют собой удивительный инструмент, который обрабатывает множество ситуаций, которые были проблематичными, когда были доступны только классы Activity
. Фрагменты позволяют организовать компоненты пользовательского интерфейса проекта для различных устройств, предоставляя вам возможность отображать несколько сегментов пользовательского интерфейса на большом экране, например на планшете, или показывать по одному за раз и связывать их вместе на небольших мобильных устройствах.
Они также помогают сегментировать код в управляемые куски, вместо того чтобы полагаться на большие и сложные классы Activity
. Одна из последних и, пожалуй, наиболее ценных функций заключается в том, что фрагменты упрощают навигацию приложения и обеспечивают простой способ взаимодействия между различными разделами приложения.
Жизненный цикл
Как и класс Activity
класс Fragment
имеет свой собственный жизненный цикл, который помогает управлять Fragment
с момента его прикрепления к Activity
до его уничтожения. Понимание этого жизненного цикла помогает вам создавать стабильные приложения, а также помогает в отладке.
-
onAttach()
иonDetach()
сигнализируют, когда фрагмент был добавлен вActivity
и этот фрагмент можно использовать в приложении. -
onCreate()
вызывается как метод инициализации для классовFragment
аonDestroy()
является эквивалентным деинициализатором. -
onCreateView()
— это метод, в котором вы создаете экземпляр макета иonCreateView()
объекты для фрагмента.onDestroyView()
вызывается, когда иерархия представления, связанная с фрагментом, удаляется. -
onStart()
иonStop()
действуют аналогично своим аналогам жизненного циклаActivity
. Эти методы запускаются, когдаFragment
становится или перестает быть видимым соответственно. -
onPause()
иonStart()
также похожи на аналогиActivity
. КогдаFragment
виден, но его фокус изменился, вызывается один из этих двух методов.
Фрагменты подклассов
Хотя класс Fragment
по-своему мощен, он не может полностью реализовать свой потенциал, не будучи расширенным для удовлетворения целей вашего приложения. К счастью, Google предоставил множество различных дочерних классов Fragment
чтобы помочь разработчикам быстро создавать великолепные приложения.
В этом разделе я хочу выделить несколько из них, чтобы вдохновить вас на создание собственных великолепных классов Fragment
. Важно знать, что эти встроенные фрагменты доступны вам, чтобы вы не изобретали велосипед заново.
ListFragment
Этот Fragment
имеет встроенный ListView
и некоторые вспомогательные методы для выделения этого компонента, такие как неопределенный ProgressBar
(круговой, вращающийся виджет загрузки) и TextView
для отображения текста, когда List
пуст.
MapFragment
Это бесценный Fragment
который оборачивает MapView
для использования со службой Google Maps. Вместо того, чтобы писать весь свой собственный код, вы можете расширить этот Fragment
чтобы добавить функциональность базовой карты в ваше приложение.
BrowseFragment
и DetailsFragment
Оба этих класса Fragment
доступны как часть библиотеки поддержки Leanback для Android TV, и они учитывают особенности пользовательского интерфейса и основные функциональные возможности для разработки приложений для телевизионного устройства.
Вывод
Несмотря на то, что в этом руководстве только поверхностно рассматриваются классы Activity
и Fragment
, вы должны знать, что они являются ключевыми компонентами для создания пользовательского интерфейса ваших приложений. Вы познакомились с жизненным циклом действий и фрагментов, и мы рассмотрели некоторые удобные подклассы Fragment
которые могут помочь вам создавать удивительные приложения.
Продолжая работать с Android, вы увидите и узнаете о множестве различных классов Activity
и Fragment
, которые вам доступны, и вы, без сомнения, создадите свой собственный.