Если сегодня взять в руки оригинальный HTC Dream или Samsung Galaxy, то может показаться, что они включаются целую вечность. Но почему они загружались так долго, если современные модели включаются за считанные секунды? Портал howtogeek.com рассказал, как разработчики Android оптимизировали загрузку операционной системы.
Примерно 12-15 лет назад даже флагманские смартфоны, вродe Nexus One или Samsung Galaxy S, включались 45-120 секунд после полного выключения или извлечения батареи. И даже после загрузки домашнего экрана на нем не сразу появлялись значки приложений, им нужно было дополнительное время.
Для сравнения, они по-прежнему быстрее, чем дешевые смартфоны того времени, которые включались 120 секунд. Иногда они просто «застревали» в анимации загрузки, из-за чего для перезагрузки приходилось вытаскивать батарею.
Нынешние модели, разумеется, гораздо быстрее. Samsung Galaxy Ultra включается менее чем за 10 секунд, и по достижению домашнего экрана им можно пользоваться, не ощущая задержек. У старых устройств было заметно меньше ресурсов — зачастую всего пара сотен мегабайт оперативной памяти и слабые процессоры. Отчасти именно из-за этого они и тратили так много времени на включение, но здесь также нельзя забывать о том, что система загрузки Android в те годы была плохо оптимизирована.
Первый фрагмент кода, который запускается на устройстве при включении — загрузчик операционной системы. Он отвечает за проверку работоспособности компонентов смартфона и загружает «сжатую» версию ОС в память. После этого она разархивируется для полноценной загрузки.
По завершению распаковки операционной системы загрузчик запускает базовые функции, вроде драйверов. Полная ОС пока не активирована; пока что на устройстве работает лишь ядро — своего рода фундамент, поверх которого находится операционная система. По мере этих процессов загрузки ранние версии Android постоянно проверяли систему на ошибки, что дополнительно замедляло процесс.
Наконец, затем загрузчик подгружает пространство пользователя (где работают все обычные приложения и службы), запущенное файлами init.rc — по сути, списками программ, которые необходимо загрузить. У 1 и 2 версий Android были огромные init.rc, запускавшие не нужные при включении программы, по одной.
Поскольку Android должна работать на широком спектре платформ и форм-факторов, у разработчиков не такой большой контроль над системой, как у Apple над iPhone. Она контролирует full stack (от железа до софта), поэтому компания может позволить себе разработку и оптимизацию специфических компонентов для операционной системы. Даже первые iPhone загружались быстрее, чем смартфоны на Android: оригинальная модель вполне могла включиться менее чем за 30 секунд. А современные iPhone — еще быстрее.
Но Android тоже не стоит на месте. У изначального загрузочного процесса ОС было несколько проблемных мест, и разработчики довольно оперативно начали над ними работать. Так, на Android Jellybean (4 версия) появилась функция bootchart, которая позволяла разработчикам визуализировать загрузочные процессы, находить боттлнеки и оптимизировать их, отдавая приоритет загрузки важным службам.
Файлы init тоже подверглись переработке. Android Lollipop (5 версия) позволила загружать программы из списков параллельно, а не поочередно, что позволило сократить время включения системы. К тому моменту Google также представила новый дизайн интерфейса Material, сделавший смартфоны более отзывчивыми сразу после холодных перезагрузок.
Android 15 запускается за 12-15 секунд. По факту, современные версии Android в принципе не загружают систему «вхолодную», если устройство не было полностью выключено (например, в результате полной разрядки батареи). При перезагрузке система придет в рабочее состояние быстро, потому что смартфон, по сути, сохраняет состояние в памяти — операционной системе не нужно целиком инициализировать процессы с нуля.