Найти в Дзене

Как устроен Android. Частый вопрос на собеседованиях.

Сегодня посмотрим на то, как внутри устроена ОС Android. Этот вопрос частенько задают на собеседованиях. Мне правда задавали его только один раз, но ходят слухи, что в хороших компаниях это спрашивают. Специально для вас нарисовала картинку. В душе я дизайнер, так что надеюсь, вы оценили сочетание цветов. Не бойтесь, если она выглядит страшновато из-за непонятных слов (не из-за дизайна!). :) Мы смотрим только основные элементы. Если хотите ещё подробнее разобраться, то пишите. Мб когда-нибудь посмотрю. Каждый верхний уровень использует нижний уровень, который находится под ним. Начнём снизу: Как видите, всё гораздо проще, чем могло показаться. Если совсем кратко: наши приложения используют прикладную среду для написания самого кода и ядро Java, которое предоставляет нам обёртки для системных библиотеки. Системные библиотеки написаны на си и там происходит работа с графикой и другими сложными вещами, которые как-то взаимодействуют с системой, т.е. с телефоном/планшетом и т.п. И чуть-ч

Сегодня посмотрим на то, как внутри устроена ОС Android. Этот вопрос частенько задают на собеседованиях. Мне правда задавали его только один раз, но ходят слухи, что в хороших компаниях это спрашивают.

Специально для вас нарисовала картинку. В душе я дизайнер, так что надеюсь, вы оценили сочетание цветов. Не бойтесь, если она выглядит страшновато из-за непонятных слов (не из-за дизайна!). :)

Моё творчество из Пейнта. Если не получится в разработке, то пойду в дизайнеры.
Моё творчество из Пейнта. Если не получится в разработке, то пойду в дизайнеры.

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

Каждый верхний уровень использует нижний уровень, который находится под ним. Начнём снизу:

  • Ядро Linux — ОС Android основана на ОС Linux. Что тут происходит? Это собственно ядро ОС, которое позволяет приложениям (которые мы пишем) использовать всякие функции устройства: звук, видео, сеть и т.п. Также тут происходит управление потоками и процессами. Каждое приложение создаётся в своём процессе и в своей среде выполнения. Внутри одного процесса может быть несколько потоков. Именно на этом розовом уровне решается, сколько времени получит процесс и потоки.
  • Среда выполнения — это такая среда, которая выполняет скомпилированный байт-код в виртуальной машине Android-приложения. У каждого приложения своя среда выполнения. Раньше это был Dalvik, а теперь ART (после API 19).
  • Системные библиотеки — тут всякие библиотеки, которые работают с графикой, базами данных, системными ресурсами и т.п. Эти библиотеки обычно написаны на С/С++. Мы, как разработчики обычных Android-приложений, напрямую не работаем с системными библиотеками. Прикладная среда (фиолетовый слой выше) даёт нам для этого обёртки, которые написаны на Java. Это то, что мы обычно используем в нашем коде.
  • Прикладная среда — подходим уже ближе к самому андроиду. Тут различные классы Android для работы со всем, что нужно для написания приложения (ресурсы, компоненты и т.п.). Здесь определяются жизненные циклы и взаимодействие компонентов друг с другом. Тут же у нас находятся всякие интересные штуки для асинхронного выполнения: Handler, IntentService, AsyncTask, Loaders и дп.
  • Ядро Java — библиотеки Java, которые мы используем в наших приложениях и которые используются в прикладной среде. Например, java.lang и java.util.
  • Приложения — наши обычные приложения, которые мы пишем. Тут мы можем использовать уровень ниже: прикладную среду и ядро Java.

Как видите, всё гораздо проще, чем могло показаться. Если совсем кратко: наши приложения используют прикладную среду для написания самого кода и ядро Java, которое предоставляет нам обёртки для системных библиотеки. Системные библиотеки написаны на си и там происходит работа с графикой и другими сложными вещами, которые как-то взаимодействуют с системой, т.е. с телефоном/планшетом и т.п.

И чуть-чуть в стороне есть среда выполнения, которая заставляет наше приложение работать. И создаётся эта среда выполнения на нижнем слое в ядре Linux.

-2