Quick start android что это

«Холодный» запуск Android-приложения

Всем приветъ! Давно ничего не писал.

Это будет серия постов о процессе «холодного» запуска Android приложения, с момента нажатия на иконку и до создания процесса приложения.

Общая схема

Открывая «окно»…

Перед тем как запустить новый процесс приложения, system_server создает стартовое окно используя метод PhoneWindowManager.addSplashScreen():

Стартовое окно это то, что пользователь будет видеть пока запускается само приложение. Окно будет отображаться до тех пор пока не будет запущена Activity и не будет отрисован первый кадр. То есть пока не будет завершен «холодный» запуск. Пользователь может видеть данное окно длительное время, поэтому постарайтесь сделать его приятным.

Содержимое стартового окна берется из drawable-ресурсов windowSplashscreenContent и windowBackground запускаемого Activity. Банальный пример такого окна:

Если пользователь восстанавливает Activity из режима последнего экрана(Recent screen), при этом на нажимая на иконку приложения, то system_server вызывает метод TaskSnapshotSurface.create(), чтобы создать стартовое окно из уже сделанного скриншота.

Как только стартовое окно показано пользователю, system_server готов запустить процесс приложения и вызывает метод ZygoteProcess.startViaZygote():

В коде видно, что метод ZygoteProcess.zygoteSendArgsAndGetResult() отправляет аргументы запуска через сокет Zygote-процессу.

«Разделение» Zygote-ы

Каждый процесс приложения запускается с помощью форкания(разделения) от существующего Zygote-процесса…

Вкратце об этом я писал в предыдущей статье про запуск Android-а. А теперь давайте посмотрим поглубже на происходящие процессы.

Когда система загружается процесс Zygote стартует и выполняет метод ZygoteInit.main():

Как вы видите метод ZygoteInit.main() делает 2 важные вещи:

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

Когда же на сокет приходит команда на форкинг процесса, метод ZygoteConnection.
processOneCommand() обрабатывает аргументы используя метод ZygoteArguments.parseArgs() и запускает метод Zygote.forkAndSpecialize():

На заметку: Начиная с Android 10 есть оптимизационная фича под названием Unspecialized App Process, которая имеет пул не специализированных Zygote-процессов, для еще более быстрого запуска приложений.

Приложение запустилось!

После форка дочерний процесс запускает метод RuntimeInit.commonInit(), который устанавливает дефолтный UncaughtExceptionHandler. Далее, процесс запускает метод ActivityThread.main():

Тут происходят две интересные вещи:

  • Метод ActivityThread.main() создает новый поток(Thread) и вызывает метод Looper.loop(), в котором будет запущен новый инстанс Looper-а. Он будет привязан к новому потоку(который становится MainThread-ом aka UiThread) и будет работать(теоретически) бесконечно. Looper привязавшись, будет ожидать сообщений для того чтобы поместить их к своему MessageQueue.
  • Далее, метод ActivityThread.attach() делает IPC-запрос к методу ActivityManagerService.attachApplication()system_server-а, тем самым давая понять, что MainThread нашего приложения запущен и готов к работе.

Контроль над приложением

В процессе system_server метод ActivityManagerService.attachApplication() вызывает метод ActivityManagerService.attachApplicationLocked(), который завершает настройку запускаемого приложения:

Парочка ключевых выводов:

  • Процесс system_server делает IPC-запрос к методу ActivityThread.bindApplication() в процессе нашего приложения, который направляет запрос к методу ActivityThread.handleBindApplication() в MainThread-е приложения.
  • Сразу после этого, system_server планирует запуск Pending Activity, Service и BroadcastReciever-ов нашего приложения.
  • Метод ActivityThread.handleBindApplication() загружает APK-файл и компоненты приложения.
  • Разработчики имеют возможность немного повлиять на процессы перед запуском метода ActivityThread.handleBindApplication(), так что именно здесь должен начаться мониторинг холодного запуска приложения.
Читайте также:  Вай фай роутеры для андроида

Давайте немного подробно разберем 3-ий пункт и узнаем что и как происходит при загрузке компонентов и ресурсов приложения. Порядок шагов такой:

  • Загрузка и создание инстанса класса AppComponentFactory.
  • Вызов метода AppComponentFactory.instantiateClassLoader().
  • Вызов метода AppComponentFactory.instantiateApplication() для загрузки и создания инстанса класса Application.
  • Для каждого объявленного ContentProvider-а, в порядке приоритета, вызов метода AppComponentFactory.instantiateProvider() для загрузки его класса и создания инстанса, после вызов метода ContentProvider.onCreate().
  • И наконец, вызов метода Application.onCreate().

Эпилог

Мы начали изучать «холодную» загрузку с очень обще-абстрагированного уровня:

Теперь мы знаем, что происходит «под капотом»:

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

Источник

Бесплатный курс «Android. Быстрый старт»

Урок курса «Android. Быстрый старт»

Операционная система Android, начиная с момента первого релиза, всегда притягивала к себе внимание людей из самых разных сфер бизнеса, программирования и академической среды. Сам факт ее появления на свет принес ее создателям, калифорнийскому стартапу из четырех друзей-программистов, кругленькую сумму в 130 млн. долларов.

История течет так быстро, что уже только убелённые сединами хипстеры начала этого века помнят, что в одном из гаражей города Пало Альто совсем недалеко от стен альма-матери множества IT-корпораций, в том числе, Sun Microsystems – Стэнфордского Университета, в 2003 году во время товарищеской вечеринки были сформулированы основные идеи программного продукта, который позже стал мировым хитом.

Базовые ценности никто не отменял

Почему мы упомянули Стэнфорд и Sun? Не только для того, чтобы передать тот дух свободы и творчества, который царил в это время в Кремниевой Долине, но и для того, чтобы с момента своего знакомства с Android, начинающие программисты понимали – эта ОС не появилась как бы сама собой на клочке бумаги и не была написана вот так «на коленке» юным дарованием.

За ней стояли люди, которые прекрасно понимали, что и зачем они делают. А заработанные ими 130 млн. долларов в 2005 году от продажи своего продукта корпорации Google только это доказывают.

Стэндфорд заложил академическую базу под эту ОС, Sun подарила язык программирования Java, как базовую среду для разработки прикладных программ. А «друзья-соседи» из Oracle (купившей Sun вместе с языком Java) своими многочисленными неудачными судебными исками помогли-таки Google доказать юридическую чистоту своей покупки.

Открытость как важнейший фактор

Примерно с этого момента (победы в суде на Oracle) аналитики признали огромные рыночные перспективы операционной системы. Всем вдруг стало понятно ее фундаментальное преимущество над большинством конкурентов. Android – это открытая операционная система для мобильных устройств, не связанная ни с какими (почти) лицензионными ограничениями, в том числе по использованию Java. А поскольку ядром самой ОС является Linux, то, в общем, на эту тему и говорить особенно нечего.

Это обстоятельство позволяет разработчикам свободно распространять своё ПО и приложения, не будучи ограниченными законом о защите авторских прав. В отличие от iOS, где приложения можно загрузить исключительно через AppStore, Android может и поддерживает более гибкую политику.

Читайте также:  Менеджер прокси для андроид

Заканчивая разговор об открытости, необходимо еще раз отметить то, с чего с начиналась статья – Linux, Java и сам Android стали тем, чем они есть, лишь благодаря усилиям сообществ единомышленников, которые образуют полноценные открытые экосистемы для всех разработчиков. Поэтому изучать в одиночку Android – значит, идти против ветра, против идеи свободного ПО. Полноценное обучение давно подразумевает лишь коллективное погружение в тему, что возможно исключительно на курсах под руководством опытных наставников.

Но не только открытый код является достоинством Android. Давайте коротко остановимся на нескольких ключевых ее особенностях:

Выбор мобильного оператора

Этот пункт «выстрелил» в полную силу еще в самом начале покорения Android мира. Apple со своей iOS, пользуясь монопольным положением на рынке в то время, взял курс на жесткую привязку своих пользователей к ограниченному набору мобильных операторов связи. Это, может быть, и неплохо с коммерческой точки зрения, но в корне противоречит свободолюбивой политике корпорации Google.

Обладая колоссальными доходами от рекламы и лицензионными отчислениями от производителей «железа», господа Ларри Пэйдж и Сергей Брин (основатели и основные акционеры Google) сдержали своё слово, данное при покупке Android, – сама операционная система и способы ее распространения остались весьма демократичны с точки зрения выбора партнёров. Стоит ли удивляться взрывному росту популярности этой платформы?

Для справки, сегодня, по данным аналитиков Gartner, четыре из пяти смартфонов работают на Android разных версий, всё остальное делят между собой 3 или 4 вендора.


Данные исследовательской и консалтинговой компании Gartner

Интеграция с сервисами Google

Положа руку на сердце, надо сказать, что и Google приложил немало усилий по продвижению Android. Этот поисковый гигант имеет миллиарды пользователей, привыкших к множеству его веб-сервисов: почта, соцсети, облачные хранилища – всего перечислять нет смысла. Есть среди них и «бриллиант» – сервис «документы», который стал занозой для еще одного конкурента – Microsoft. И всё это если изначально не работает на стандартном мобильном устройстве, то требует минимальных усилий разработчиков.

Как известно, детище Билла Гейтса «проспало» мобильную революцию, сконцентрировавшись на офисных и серверных продуктах. А когда примерно у половины населения планеты появились на руках смартфоны и планшеты с Android, выяснилось, что бесплатные «Документы» (и другие конкурирующие продукты) расходятся, как горячие пирожки. Microsoft бросилась в погоню, купив по дороге бывшего супергероя мобильного рынка Nokia. Но пока они далеко позади…

Стартовав несколько позже своего основного конкурента iOS, Google активно наращивает список технологических решений для интеграции их и в Android, и в Chrome OS – еще одной операционной системы корпорации на базе технологий терминального доступа. Наступает на пятки Apple с его голосовой системой управления Siri новейшие технологии Google Now.

Перечислять можно долго, прорывных достижений много. Единственное, что сдерживает: недостаток квалифицированных программистов. Поэтому Google имеет внушительную систему поощрений для мотивации обучающихся технологиям Android. Например, в 2007 году Google объявила первый конкурс Android Developer Challenge с призовым фондом в 5 млн. долларов. Кризис немного подкосил призовой фонд 2009 года — 2 млн. долл., что, согласитесь, тоже прилично.

Такие мероприятия стали традиционными и проводятся регулярно: толковые люди корпорации нужны сейчас и будут востребованы еще многие годы. Но при всём при этом отмечается: программировать на базе платформы Android относительно просто, не требуется такого серьезного старта, как, например, с Haskell.

Индивидуализация и поддержка продуктов третьих сторон

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

Читайте также:  Вайбер для андроид размер

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

При этом всём, в отличие от некоторых конкурирующих платформ, нет зацикленности на каких-то технологиях, которые теоретически могут стать мейнстримом, а могут и не стать. Например, сколько ушатов, сами знаете чего, вылилось на головы программистов под iOS из-за фанатической веры Apple в HTML 5. В результате огромное количество веб-ресурсов, использующих технологию Flash, пролетели мимо браузера Safari. Таких примеров очень много, а причем тут разработчики?

Ресурсы для программистов

Описывать достоинства той или иной программной платформы бессмысленно без наличия поддержки главного ее спонсора и идеолога. Что касается Google, то, повторимся, в этой компании силен опенсорсный дух. На нем она основана и им живет. Это не в качестве рекламы, а про то, что имея основные доходы в сферах, далеких от продажи и лицензирования софта, Google внес колоссальный безвозмездный вклад в популяризацию свободного ПО.

Кроме Android в этом ряду стоит целый ряд первоклассных продуктов: это набор JavaScript фреймворков, движков по распознаванию текстов, звуков, видео (например, Tesseract), решения для Big Data, семейство ОС Chrome т.д.

А какая популяризация операционной системы без детальной документации по ней самой и всему тому стеку прикладного программного обеспечения, которое может работать с ней непосредственно или удаленно через API? Чего-чего, а документации по Android вполне достаточно для разработок на самом серьезном уровне. И никто из этого не делает секретов. Надо только знать, что и где искать.

Язык разработки: Java. Начинать надо с него

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

Почему? Описывать не будем, на курсах всё сами узнаете. Скажем лишь, что в известнейшем рейтинге популярности языков программирования Java и JavaScript сражаются за первое и второе места. При этом оба они поддерживаются платформой Android и приложениями на её базе, хотя и предназначены для разных целей и JavaScript «заточен» под работу с веб.


Данные аналитической фирмы RedMonk

Цель нашего курса — погрузить слушателей в мир Android, наполненный интереснейшей историей и философией свободного ПО, окунуться в парадигму объектно-ориентированного программирования на Java, а также оформить «входной билет» в мировое сообщество девелоперов этой мобильной платформы. Поверьте, это того стоит!

Первое занятие — установка и настройка инструментов для разработки игры с комментариями преподавателя. Вам понадобится компьютер с Windows, Mac или Linux вкупе с желанием научиться новым навыкам и приобрести полезные знания. А что будет дальше — смотрите.

Источник

Оцените статью