9 марта компания Google представила Android N — предварительный выпуск седьмой версии своей операционки. И пока все радуются многооконному режиму, новой панели быстрых настроек и развитым уведомлениям, на которые можно отвечать без запуска приложения, я бы хотел сосредоточиться на действительно важных новшествах, которые делают Android лучше как систему, а именно: улучшениях в Doze, JIT/AOT-компиляторе, новом API тайлов и движении Android на десктопы.

 

Режим freeform

В октябре прошлого года Google заявила, что собирается слить Android и Chrome OS в одно целое. Тогда еще было непонятно, что конкретно они имеют в виду, однако высказывались предположения, что компания просто интегрирует куски Chrome OS в Android и заставит его работать на десктопах. Что ж, похоже, это оказалось правдой, так как в Android N действительно есть не только режим разделения экрана между двумя приложениями, но и так называемый режим freeform, который позволяет запускать приложения в плавающих окнах точно так же, как это реализовано в Remix OS.

Режим freeform
Режим freeform

Объяснить наличие данного режима ничем иным, как желанием перенести систему на десктопы, нельзя: для планшетов хватит и режима разделения экрана, а на смартфонах не нужен ни тот ни другой. Десктопное будущее также косвенно подтверждается изменениями в API. Например, теперь есть выделенные кейкоды для копирования, вырезания и вставки, а также колбэк onProvideKeyboardShortcuts() для активити. Последний вызывается в ответ на ту или иную заданную программистом клавиатурную комбинацию. Также появился API для изменения курсора (PointerIcon) при наведении на элементы интерфейса (View).

Все это говорит в пользу того, что вскоре мы действительно увидим Android если не на десктопах, то уж точно на хромбуках и устройствах класса «трансформер»: подключил клавиатуру — получил классический многооконный интерфейс, отключил — у тебя стандартный Android. А можно пойти дальше и представить себе следующую ситуацию: въезжаешь в гостиницу, подключаешь свой смартфон по HDMI-кабелю к телевизору и получаешь полноценный многооконный рабочий стол (вместо стандартного Android UI, как сейчас). Неплохо, не правда ли?

 

AOT/JIT-компилятор и скорость установки софта

К релизу Android 5.0 Google решила окончательно отказаться от JIT-компиляции в пользу AOT-компиляции приложений. Это значит, что если в прошлых версиях Android приложения работали под управлением виртуальной машины (Dalvik), которая транслировала компоненты байт-кода приложения в машинные инструкции прямо по ходу его исполнения (JIT, just-in-time), то в Android 5.0 трансляция байт-кода в машинный код происходила один раз на этапе установки приложения (AOT — ahead-of-time).

Однако на самом деле JIT-компилятор никуда не делся и продолжал применяться для некоторых участков кода (в том числе самого Android), которые использовали кодогенерацию, а потому не могли быть переведены в машинные инструкции заблаговременно. Этот JIT-компилятор было решено задействовать в Android 7.0 с целью ускорения установки приложения и первичной загрузки после обновления: AOT-компилятор приводил к заметным задержкам в обоих случаях.

Так что Android 7.0 теперь действует иначе, чем Android 5.0+. Вместо того чтобы запускать AOT-компиляцию каждого приложения на этапе установки, он запускает приложение под управлением виртуальной машины, используя JIT-компилятор (почти так же, как в Android < 5.0), но следит за тем, какие участки кода приложения выполняются чаще всего. Затем эта информация используется для AOT-компиляции данных участков кода. Последняя операция выполняется только во время бездействия смартфона, находящегося на зарядке.

Говоря простыми словами, Google сплавила два совершенно различных подхода и заставила два компилятора работать сообща. Плюсами такой инновации являются:

  • более эффективная компиляция — при реальном запуске приложения компилятор имеет возможность узнать о его работе гораздо больше, чем выполняя статический анализ, и, как следствие, применяются более подходящие методы оптимизации для каждой ситуации;
  • сохранение оперативной и постоянной памяти — байт-код компактнее машинного кода, а если выполнять AOT-компиляцию только отдельных участков приложения и не выполнять компиляцию приложений, которыми юзер не пользуется, можно существенно сэкономить пространство NAND-памяти;
  • резкое увеличение скорости установки и первой загрузки после обновления системы — нет AOT-компиляции, нет задержки.
 

Новый, улучшенный Doze

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

Doze — прекрасная технология, однако изначально в нее была заложена одна очень спорная особенность, за которую Google нередко критиковали: Doze учитывает не только время бездействия устройства, но и время его нахождения в покое. Другими словами, если постоянно перемещать смартфон (нести в сумке, например), он никогда не уйдет в Doze, пользуешься ты им или нет.

В Android 7.0 Google исправила эту проблему, и теперь смартфон переходит в режим Doze независимо от того, перемещается ли он.

Стадии Doze
Стадии Doze
 

Что еще?

  • OpenJDK — Android теперь использует Java-библиотеки OpenJDK, благодаря чему появилась полноценная поддержка языка Java 8.
  • Quick Settings Tile API — приложения теперь могут добавлять собственные тайлы в панель быстрых настроек (к слову сказать, такая функциональность уже есть в CyanogenMod).
  • Project Svelte — продолжение разработки средств для создания более эффективных и не жадных до ресурсов приложений (JobScheduler и GcmNetworkManager).
  • Data Saver — новый сервис, который автоматически активируется, когда проплаченный пакет трафика подходит к концу, и отключает фоновую передачу данных, ограничивая явную.
  • Блокиратор номеров — ожидаемая с самых первых версий Android функция.
  • OpenGL ES 3.2 — поддержки Vulkan пока, к сожалению, нет.
  • Call screening — сторонние звонилки теперь могут показывать собственный экран входящего звонка.
  • Multi-locale — теперь Android позволяет использовать сразу два системных языка (браузер больше не будет предлагать тебе перевод на английский, если ты его знаешь!).
  • Always on VPN — теперь система может гарантировать, что трафик не утекает.
  • Direct boot — зашифрованный смартфон теперь сохраняет базовую функциональность, даже если не введен PIN-код для расшифровки.
 

Выводы

С каждым новым релизом Google вносит в Android не только видимые юзеру изменения, но и массу внутренних улучшений, что, конечно же, не может не радовать. Какие-то из них имеют спорный характер (новый Doze или запрос полномочий во время работы в Android 6.0), другие, наоборот, важный шаг в правильном направлении (JIT/AOT-компиляция). Как бы там ни было, Google постоянно экспериментирует, и за всем этим очень интересно наблюдать.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии