какой компонент управляет распределенным множеством данных приложения
Пишем распределенное хранилище за полчаса
Привет, меня зовут Игорь и я работаю в команде Tarantool. При разработке мне часто требуется быстрое прототипирование приложений с базой данных, например, для тестирования кода или для создания MVP. Конечно же хочется, чтобы такой прототип требовал минимальных усилий по доработке, если вдруг будет решено пустить его в работу.
Мне не нравится тратить время на настройку SQL базы данных, думать, как управлять шардированием данных, тратить много времени на изучение интерфейсов коннекторов. Хочется просто написать несколько строчек кода и запустить его, чтобы все работало из коробки. В быстрой разработке распределенных приложений мне помогает Cartridge — фреймворк для управления кластерными приложениями на основе NoSQL базы данных Tarantool.
Сегодня я хочу рассказать о том, как можно быстро написать приложение на Cartridge, покрыть его тестами и запустить. Статья будет интересна всем, кто устал тратить много времени на прототипирование приложений, а также людям, которые хотят попробовать новую NoSQL технологию.
Содержание
В статье вы узнаете о том, что такое Cartridge и познакомитесь с принципами написания кластерной бизнес-логики в нем.
Мы напишем кластерное приложение для хранения данных о сотрудниках некоторой компании, нас ждет:
Cartridge
Cartridge — это фреймворк для разработки кластерных приложений, он управляет несколькими инстансами NoSQL БД Tarantool и шардирует данные с помощью модуля vshard. Tarantool — это персистентая in-memory база данных, он очень быстрый за счет хранения данных в оперативной памяти, но при этом надежный — Tarantool сбрасывает все данные на жесткий диск и позволяет настроить репликацию, а Cartridge сам заботится о настройке узлов Tarantool и шардировании узлов кластера, так что все, что нужно разработчику — написать бизнес-логику приложений и произвести настройку фейловера.
Преимущества Сartridge
Создаем первое приложение
Для этого нам понадобится cartridge-cli — это утилита для работы с картриджными приложениями. Она позволяет создавать приложение из шаблона, управлять локально запущенным кластером и подключаться к инстансам тарантула.
Установим Tarantool и cartridge-cli
Установка на Debian или Ubuntu:
Установка на CentOS, Fedora или ALT Linux:
Установка на MacOS:
Создадим шаблонное приложение с именем myapp:
Получим структуру проекта примерно такого содержания:
На этом шаге вы уже получите готовое к работе hello world-приложение. Его можно запустить с помощью команд
После этого по адресу localhost:8081/hello мы увидим hello-world.
Давайте теперь на основе шаблона напишем свое небольшое приложение — шардированное хранилище с HTTP API для наполнения и получения данных. Для этого нам потребуется понимание того, как пишется кластерная бизнес-логика в Cartridge.
Пишем бизнес-логику в Cartridge
В основе каждого кластерного приложения лежат роли — Lua-модули, в которых описывается бизнес-логика приложения. Например, это могут быть модули, которые занимаются хранением данных, предоставляют HTTP API или кэширует данные из Oracle. Роль назначается на набор инстансов, объединенных репликацией (репликасет) и включается на каждом из них. У разных репликасетов может быть разный набор ролей.
В cartridge есть кластерная конфигурация, которая хранится на каждом из узлов кластера. Там описывается топология, а также туда можно добавить конфигурацию, которой будет пользоваться ваша роль. Такую конфигурацию можно изменять в рантайме и влиять на поведение роли.
Каждая роль имеет структуру следующего вида:
Жизненный цикл роли
Кластерные NoSQL-запросы
В Cartridge есть несколько вариантов написания кластерных запросов:
Вызовы функций через API vshard (это сложный способ, но зато очень гибкий):
vshard.router.callrw(bucket_id, ‘app.roles.myrole.my_rpc_func’, <. >)
Схема приложения
Представим, что мы хотим кластер с одним роутером и с двумя группами стораджей по два инстанса. Такая топология характерна и для Redis Cluster, и для Mongodb кластера. Также в нашем кластере будет один инстанс — stateboard (в котором stateful-failover будет сохранять состояние текущих мастеров). Когда требуется повышенная надёжность, вместо stateboard лучше использовать кластер etcd.
Роутер будет распределять запросы по кластеру, а также управлять фейловером.
Пишем свои роли
Нам потребуется написать две своих роли, одну для хранения данных, вторую для HTTP API.
В директории app/roles создаем два новых файла: app/roles/storage.lua и app/roles/api.lua
Хранилище данных
Если вы привыкли к SQL, то Lua-код в init-функции будет эквивалентен следующему псевдо-SQL коду:
Добавим следующий код в файл app/roles/storage.lua :
Остальные функции из API роли нам не понадобятся — у нашей роли нет конфигурации и она не выделяет ресурсы, которые нужно очищать после завершения работы.
HTTP API
Определим функцию для POST-запроса. В теле запроса будет приходить объект, который мы хотим записать в базу.
В GET-метод будет передаваться уровень зарплаты сотрудников и в качестве ответа мы будем возвращать JSON со списком сотрудников, которые имеют зарплату выше заданной.
Соберем все это вместе:
init.lua
Опишем файл init.lua, который будет являться входной точкой приложения на Cartridge. В init-файле картриджа необходимо вызвать функцию cartridge.cfg() для настройки инстанса кластера.
Последним шагом будет описание зависимостей нашего приложения в файле myapp-scm-1.rockspec.
Код приложения уже готов к запуску, но сначала мы напишем тесты и удостоверимся в его работоспособности.
Пишем тесты
Любое приложение нуждается в тестировании. Для unit-тестов хватит обычного luatest, но если вы хотите написать хороший интеграционный тест, вам поможет модуль cartridge.test-helpers. Он поставляется вместе с Cartridge и позволяет поднять в тестах кластер любого состава, который вам нужен.
Напишем вспомогательный модуль, который будем использовать в интеграционных тестах. В нем создается тестовый кластер из двух репликасетов, в каждом из которых будет по одному инстансу:
Презентация была опубликована 7 лет назад пользователемВиталий Майданов
Похожие презентации
Презентация на тему: » Виды приложений и их структура Лекция 2 Введение в разработку приложений для смартфонов на ОС Android.» — Транскрипт:
1 Виды приложений и их структура Лекция 2 Введение в разработку приложений для смартфонов на ОС Android
2 Содержание Введение Основные виды Android-приложений Безопасность Архитектура приложения, основные компоненты Манифест приложения Ресурсы Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 2
3 Введение Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 3
4 Общие вопросы Виды мобильных приложений и их особенности Организация исполнения приложений в ОС Android Обеспечение безопасной среды функционирования приложений Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 4
5 Особенности архитектуры Android-приложения, разработанные для смартфонов, вполне смогут выполняться и на планшетах Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 5
6 Основные виды Android-приложений Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 6
7 Виды приложений Приложения переднего плана Фоновые приложения Смешанные приложения Виджеты Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 7
8 Приложения переднего плана Выполняют свои функции только когда видимы на экране В свернутом виде выполнение приложений приостанавливается Например: игры текстовые редакторы видеопроигрыватели Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 8
9 Важно Знание жизненного цикла активности для гладкости переключения между фоновым и активным режимами Разработка удобного и интуитивно понятного интерфейса Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 9
10 Фоновые приложения После настройки не предполагают взаимодействия с пользователем Большую часть времени находятся и работают в скрытом состоянии Например: службы экранирования звонков SMS-автоответчики Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 10
11 Важно Помнить, что совершенно невидимые сервисы будут неуправляемыми Позволить пользователю только: Санкционирование запуска сервиса Настройка сервиса Приостановка работы сервиса Прерывание работы сервиса Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 11
12 Смешанные приложения Большую часть времени работают в фоновом режиме Допускают взаимодействие с пользователем даже после настройки Например: Мультимедиа-проигрыватели Чаты Почтовые клиенты Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 12
13 Важно Такие приложения, не теряя работоспособности в фоновом режиме, должны реагировать на пользовательский ввод При взаимодействии с пользователем должны учитывать свое текущее состояние Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 13
14 Виджеты Небольшие приложения, отображаемые в виде графического объекта на рабочем столе Например: приложения для отображения динамической информации Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 14
15 Важно Планируя разработку приложения, необходимо определить способ его использования, только после этого приступать к проектированию и непосредственно разработке Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 15
16 Безопасность Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 16
18 Жизнь приложения в ОС Android Каждому приложению соответствует отдельный Linux процесс Каждому процессу соответствует отдельный экземпляр виртуальной машины Dalvik Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 18
19 Обеспечение безопасности В среде функционирования приложений каждому приложению разрешен доступ только к компонентам, необходимым для его работы Если двум приложениям необходимо иметь доступ к файлам друг друга, им присваивается один и тот же пользовательский ID Если приложению требуется доступ к системным данным, пользователь даёт приложению такие полномочия во время установки Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 19
20 Архитектура приложения Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 20
21 Архитектура приложения Архитектура Android приложений основана на идее многократного использования компонентов, которые являются основными строительными блоками Каждый компонент является отдельной сущностью и помогает определить общее поведение приложения Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 21
22 Основные компоненты Активности Сервисы Контент-провайдеры Приемники широковещательных сообщений Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 22
23 Активности Видимая часть приложения (экран, окно, форма), отвечает за отображение графического интерфейса пользователя Например: Приложение для работы с будильником Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 23
24 Важно Приложение может иметь несколько активностей Активности приложения не зависят друг от друга Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 24
25 Сервис Компонент, который работает в фоновом режиме, выполняет длительные по времени операции или работу для удаленных процессов Например: Проигрывание музыки в фоновом режиме Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 25
26 Важно Может быть запущен другим компонентом и после этого работать самостоятельно, а может остаться связанным с этим компонентом и взаимодействовать с ним Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 26
27 Контент-провайдеры Управляет распределенным множеством данных приложения Например: Контент-провайдер в системе Android, управляющий информацией о контактах пользователя Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 27
28 Важно Данные могут храниться в файловой системе, в базе данных SQLite, в сети Позволяет другим приложениям при наличии у них соответствующих прав делать запросы или даже менять данные Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 28
29 Приемники широковещательных сообщений Приемник компонент, который реагирует на широковещательные извещения Например: Извещение о низком заряде батареи Инициирование широковещания Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 29
30 Важно Не отображают пользовательского интерфейса Могут создавать уведомление на панели состояний Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 30
31 Иерархия классов Android SDK Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 31
32 Класс View Основной строительный блок для компонентов пользовательского интерфейса (UI) Определяет прямоугольную область экрана и отвечает за прорисовку и обработку событий Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 32
33 Класс View Базовый класс для виджетов (GUI widgets) и класса ViewGroup Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 33
34 Класс Intent Используются для передачи сообщений между основными компонентами приложений Содержит описание операции, которая должна быть выполнена, и обычно используется для запуска активности или сервиса Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 34
35 Класс Intent Механизмы передачи намерений: Запуск активности, новое действие Context.startActivity() или Activity.startActivityForResult() Запуск сервиса Context.startService(), связь вызывающего компонента и сервиса Context.bindService() Доставка объекта-намерения приемникам широковещательных сообщений Context.sendOrderedBroadcast(), Context.sendStickyBroadcast(), Context.sendBroadcast() Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 35
36 Класс Intent В этой системе сообщений не случается накладок: сообщение-намерение, отправленное определенному компоненту, будет получено именно этим компонентом и никем другим Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 36
37 Жизненный цикл компонент Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 37
38 Активности (Activities) Активность это окно, несущее графический интерфейс пользователя Обычно занимает весь экран устройства, однако возможно создавать полупрозрачные или плавающие диалоговые окна Мобильные приложения обычно содержат несколько активностей Одна из активностей определяется как «главная», и именно ее пользователь видит при первом запуске приложения Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 38
41 Жизненный цикл активности Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 41
42 Сервисы (Services) Компонент, предназначенный для выполнения длительных операций в фоновом режиме Способы существования сервисов: сервис запущен (started) и работает в фоновом режиме пока не выполнит свою задачу сервис привязан (bound) к одному/нескольким компонентам, предлагает интерфейс для взаимодействия с компонентом и работает пока привязан хотя бы к одному компоненту Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 42
45 Жизненный цикл сервиса Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 45
47 Контент-провайдеры (Content Providers) Необходимы в следующих случаях: приложение предоставляет сложные данные или файлы другим приложениям приложение позволяет пользователям копировать сложные данные в другие приложения приложение предоставляет специальные варианты поиска, используя поисковую платформу (framework) Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 47
48 Контент-провайдеры (Content Providers) Проектирование способа хранения данных: Если данные представлены файлом, то провайдер может возвращать ссылку на файл Если данные представлены некоторой структурой, необходимо хранить данные в табличной форме Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 48
50 Контент-провайдеры (Content Providers) Определение строки авторизации провайдера, URI для его строк и имен столбцов: Если от провайдера требуется управление намерениями, необходимо определить действия намерений, внешние данные, флаги и разрешения, которые необходимы приложениям для доступа к данным провайдера Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 50
51 Приемники широковещательных сообщений (Broadcast Receivers) Широковещательный приемник является наследником класса BroadcastReceiver. Класс рассчитан на получение объектов-намерений отправленных методом sendBroadcast() Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 51
52 Нормальные широковещательные сообщения передаются с помощью Context.sendBroadcast Направленные широковещательные сообщения передаются с помощью Context.sendOrderedBroadcast Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 52 Приемники широковещательных сообщений (Broadcast Receivers)
53 Манифест приложения Корневой каталог каждого приложения под Android должен содержать файл AndroidManifest.xml Содержит всю необходимую информацию, используемую системой для запуска и выполнения приложения Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 53
54 Манифест приложения Основная информация в манифесте: Имя Java пакета приложения Описание компонентов приложения Определение процессов Объявление полномочий, которыми должно обладать приложение для доступа к защищенным частям API и взаимодействия с другими приложениями Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 54
55 Манифест приложения Основная информация в манифесте: Объявление полномочий, которыми должны обладать другие приложения для взаимодействия с компонентами данного Список вспомогательных классов Определение минимального уровня Android API для приложения Список библиотек связанных с приложением Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 55
56 Ресурсы Каждый тип ресурсов необходимо размещать в специальной поддиректории папки res/ а) используется компоновка по умолчанию (приложение не содержит альтернативы) б) каждое устройство использует соответствующую компоновку Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 56
57 Ресурсы animator/ свойства анимации anim/ анимация преобразований color/ списки цветов drawable/ графические файлы layout/ компоновка элементов пользовательского интерфейса menu/ все меню приложения values/ простые значения строк, чисел, цвета Введение в разработку приложений для смартфонов на ОС Android. Лекция 2. Виды приложений и их структура. 57
Введение в разработку Android-приложений
1.5. Структура Android-приложения
Название | Описание | Необходимость |
---|---|---|
gen | Файлы, сгенерированные самой Java. Здесь находится такой важный файл как R.java | Да |
AndroidManifest.xml | Файл манифеста AndroidManifest.xml предоставляет системе основную информацию о программе. Каждое приложение должно иметь свой файл манифеста | Да |
src | Каталог, в котором содержится исходный код приложения | Да |
assets | Произвольное собрание каталогов и файлов | Нет |
res | Каталог, содержащий ресурсы приложения. В данном каталоге могут находиться подпапки drawable, anim, layout, menu, values, xml и raw (см. ниже) | Да |
1.5.1. Файл манифеста AndroidManifest.xml
Файл манифеста AndroidManifest.xml предоставляет системе основную информацию о программе. Каждое приложение должно иметь свой файл AndroidManifest.xml. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor, который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения.
По умолчанию Eclipse создает элемент с четырьмя атрибутами:
xmlns:android определяет пространство имен Android.
package определяет уникальное имя пакета приложения.
android:versionCode указывает на внутренний номер версии.
android:versionName указывает номер пользовательской версии.
Наиболее распространненные разрешения:
INTERNET – доступ к интернету
READ_CONTACTS – чтение (но не запись) данных из адресной книги пользователя
WRITE_CONTACTS – запись (но не чтение) данных в адресную книгу пользователя
RECEIVE_SMS – обработка входящих SMS
ACCESS_FINE_LOCATION – точное определение местонахождения при помощи GPS
android:minSdkVersion определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте.
android:maxSDKVersion позволяет определить самую позднюю версию, которую готова поддерживать программа.
targetSDKVersion позволяет указать платформу, для которой разрабатывалось и тестировалось приложение.
android.hardware.camera – требуется аппаратная камера.
android.hardware.camera.autofocus – требуется камера с автоматической фокусировкой.
1.5.2. Ресурсы
В Android принято хранить такие объекты, как изображения, строковые константы, цвета, анимацию, стили и тому подобное, за пределами исходного кода. Система поддерживает хранение ресурсов во внешних файлах. Внешние ресурсы легче поддерживать, обновлять и редактировать.
В основном, ресурсы хранятся в виде XML-файлов в каталоге res с подкаталогами values, drawable-ldpi, drawable-mdpi, drawable-hdpi, layout. Но также бывают еще два типа ресурсов: raw и assets.
Для удобства система создает идентификаторы ресурсов и использует их в файле R.java (класс R, который содержит ссылки на все ресурсы проекта), что позволяет ссылаться на ресурсы внутри кода программы. Статический класс R генерируется на основе заданных ресурсов и создается во время компиляции проекта. Так как файл R генерируется автоматически, то нет смысла его редактировать вручную, потому что все изменения будут утеряны при повторной генерации.
В общем виде ресурсы представляют собой файл (например, изображение) или значение (например, заголовок программы), связанные с создаваемым приложением. Удобство использования ресурсов заключается в том, что их можно изменять без повторной компиляции или новой разработки приложения.
Самыми распространенными ресурсами являются, пожалуй, строки (string), цвета (color) и графические рисунки (bitmap).
В следующей таблице перечислены основные ресурсы Android-приложения:
Тип ресурса | Размещение | Описание |
---|---|---|
Цвета | /res/colors/ | Идентификатор цвета, указывающий на цветовой код. |
Строки | /res/strings/ | Строковые ресурсы. В их число также входят строки в формате java и html. |
Меню | /res/menus/ | Меню в приложении можно задать как XML-ресурсы. |
Параметры | /res/values/ | Представляет собой параметры или размеры различных элементов. |
Изображения | /res/drawable/ | Ресурсы-изображения. Поддерживает форматы JPG, GIF, PNG (самый предпочтительный) и другие. Каждое изображение является отдельным файлом. Система также поддерживает stretchable images, в которых можно менять масштаб отдельных элементов, а другие элементы оставлять без изменений. |
Представляет цветные прямоугольники, которые используются в качестве фона основных отрисовываемых объектов, например точечных рисунков. | ||
Анимация | /res/anim/ | Android может выполнить простую анимацию на графике или на серии графических изображений. |
Произвольные XML-файлы | /res/xml/ | В Android в качестве ресурсов могут использоваться произвольные XML-файлы. |
Произвольные необработанные ресурсы | /res/raw/ | Любые нескомпилированные двоичные или текстовые файлы, например, видео. |
Помимо изображений в каталоге res/drawable могут храниться ресурсы простых геометрических фигур. Вот лишь некоторые из возможных атрибутов:
Анимация в Android бывает двух видов:
1.5.3. Разметка
В Android-приложениях, пользовательский интерфейс построен на View и ViewGroup объектах. Класс ViewGroup является основой для подкласса Layout (разметка).
Android-плагин для Eclipse включает в себя специальный редактор для создания разметки двумя способами. Редактор имеет две вкладки: одна позволяет увидеть, как будут отображаться элементы управления, а вторая – создавать XML-разметку вручную.
Создавая пользовательский интерфейс в XML-файле, можно отделить дизайн приложения от программного кода. Можно изменять пользовательский интерфейс в файле разметки без необходимости изменения программного кода. Например, можно создавать XML-разметки для различных ориентаций экрана мобильного устройства (portrait, landscape), размеров экрана и языков интерфейса. Впрочем, элементы интерфейса можно создавать и программно, когда это необходимо.
Каждый файл разметки должен содержать только один корневой элемент компоновки, который должен быть объектом View или ViewGroup. Внутри корневого элемента можно добавлять дополнительные объекты разметки или дочерние элементы интерфейса, чтобы постепенно формировать иерархию элементов, которую определяет создаваемая разметка.
Существует несколько стандартных типов разметок:
Все описываемые разметки являются подклассами ViewGroup и наследуют свойства, определенные в классе View.
Разметки ведут себя как элементы управления, и их можно группировать. Расположение элементов управления может быть вложенным. Например, можно использовать RelativeLayout в LinearLayout и так далее. Однако, слишком большая вложенность элементов управления вызывает проблемы с производительностью.