Сегодня разбираем Android quiz с конференции для мобильных разработчиков Mobius 2018 Moscow.
Формат был довольно стандартный: 15 вопросов по 4 варианта ответа. Временной лимит 30 секунд на каждый вопрос.
Поехали!
Вопрос 1
Astra boy/Bender
Всем известно, что каждая новая версия Android получает кодовое наименование на тему сладостей и присваиваются они в алфавитном порядке (Cupcake, Donut, Eclair и т.д.).
Однако, первоначально, разработчиками планировалось давать версиям названия, используя вымышленные имена роботов. Поэтому, первые версии Android носили имя Astra boy и Bender. Это были внутренние релизы еще до выпуска безымянной версии 1.0. Однако, по определенным причинам вектор сменился и версию 1.1 было решено назвать Petit Four. Это была первая сладкая версия Android. А уже начиная со следующей версии (Cupcake 1.5), имена начали присваивать соблюдая алфавитный порядок.
Вопрос 2
Marshmallow
С выходом API 23 (Marshmallow) в Android ввели новое понятие runtime permissions. Эта фича должна была добавить прозрачности для пользователей к разрешениям выдаваемым приложению. До релиза “зефирки” выдача разрешений происходила в момент установки приложения.
На заметку, Android содержит в себе более 100 уникальных permissions.
Вопрос 3
measure()
measure() — вызывается для определения требований к размеру View и всех его дочерних элементов.
onMeasure() — вызывается из measure() для проведения фактической работы по определению размеров View.
onLayout() — вызывается для расположения элемента внутри контейнера
onDraw() — вызывается для отрисовки View контента.
Более подробную информацию по отрисовке View можно найти здесь.
Вопрос 4
isUserSmell()
В SDK отсутствует метод isUserSmell(). Возможно в будущем, с появлением на устройствах соответствующих датчиков…
Разберем что же делают остальные методы:
isUserMonkey() — метод предназначен для проверки является ли пользователь тестовым в рамках автоматизированного теста monkey.
isUserAGoat() — начиная с API 21, проверяет установлено ли приложение Goat Simulator GoatZ (“Симулятор козла”). На версиях ниже, метод всегда возвращает false. Располагается в классе
android.os.UserManager
.isFinalCountdown() — метод открывает клип группы Europa «The Final Countdown». Добавили его в API 26. Расположен в классе
android.widget.Chronometer
.
Вопрос 5
private static final int mobius = 2018
Здесь проверялось знание ключевого слова
const
, которое используется для объявленияcompile time constants
. В мире Java это соответствует модификаторамstatic final
.
Вопрос 6
sdpi
Если xhdpi и mdpi у разработчиков на слуху, то с tvdpi дела обстоят иначе. Популярности оно не снискало, а потому и устройств в категории tvdpi очень и очень мало, но они были. Наиболее известное из них — Nexus 7 (2012).
На заметку, tvdpi имеет коэффициент 1.3 относительно mdpi.
Вопрос 7
Упаковывает все ресурсы и файлы в apk
AAPT (Android Asset Packaging Tool) — Android инструмент для создания .APK файлов.
Условно работу этой утилиты можно разделить на два этапа:
— Компиляция. На данном этапе идет подготовка ресурсов: генерируется класс R, ресурсы XML переводятся в бинарный формат, производится обработка PNG и пр.
— Упаковка (линкование). Все промежуточные файлы, созданные на этапе компиляции, упаковываются в APK.Что касается остальных вариантов ответа:
— обфускацией кода обычно занимается proguard.
— Java байт-код является результатом работы Java Compiler, который транслирует исходный код в Java байт-код.
— Dalvik байт-код является результатом работы Dalvik Compiler (DX, D8), который транслирует .class (Java байт-код) в .dex (Dalvik байт-код). Исходный код в Dalvik байт-код не транслируется напрямую.Процесс сборки Android приложения в общих чертах приведен в документации.
Вопрос 8
RIGHT OUTER JOIN
Из перечисленного не поддерживается RIGHT OUTER JOIN.
Вопрос 9
2x
Name Density ldpi 0.75 mdpi 1 tvdpi 1.3 hdpi 1.5 xhdpi 2 xxhdpi 3 и 2.6 xxxhdpi 4 и 3.5
Вопрос 10
ART
ART (Android RunTime) — новая среда исполнения DEX байт-кода, пришедшая на смену Dalvik. Наиболее существенным отличием Dalvik от ART является то, что Dalvik основан на JIT (Just-in-Time) компиляции, в то время как ART — на AOT (Ahead-of-Time). В общих чертах это означает, что Dalvik переводит dalvik байт-код в машинный всякий раз во время выполнения приложения, а ART занимается этим один раз, на этапе установки приложения, сохраняя результат в памяти устройства. Это приводит к тому, что на ART происходит более быстрый запуск и выполнение приложений по сравнению с Dalvik, но при этом увеличивается время установки приложения. Помимо этого в ART провели оптимизацию GC, а также добавили ряд функций для улучшения разработки и отладки приложений.
Кроме того, стоит отметить, что ART также включает в себя JIT компилятор, который дополняет AOT. Подробнее об этом здесь.
Вопрос 11
YAGNI
KISS (Keep It Simple, Stupid) — не усложняй!
DRY (Don’t repeat yourself), DIE (Duplication Is Evil) — не повторяйся!
WTF (количество “чёзана” в секунду) — единица измерения качества кода на ревью.
YAGNI (You aren't gonna need it) — вам это не понадобится!
Вопрос 12
Application Not Responding
ANR (Application Not Responding) — проблема, возникающая при невозможности основного потока приложения обрабатывать пользовательские события и перерисовывать UI.
В Android за отзывчивостью приложения наблюдают системные сервисы
ActivityManager
иWindowManager
. Если выполнится одно из нижеперечисленных условий:— нет реакции на события ввода (touch и key pressed события),
— BroadcastReceiver не завершит выполнение в течение 10 секунд,то система уведомит пользователя о проблеме, показав соответствующий диалог ANR.
Вопрос 13
Size & mode
MeasureSpec предназначен для передачи требований к размерам от родителя к дочерним view компонентам. Эти требования составляются по двум измерениям: ширина и высота. Значения по каждому из измерений являются составными: первая часть содержит в себе информацию о доступном пространстве (в пикселях), вторая часть — ограничения на использование доступного пространства. Эти ограничения могут быть следующими:
MeasureSpec.UNSPECIFIED — ограничений нет, view может принимать любой размер, который ей потребуется.
MeasureSpec.AT_MOST — определены точные размеры, view будут даны именно эти границы.
MeasureSpec.EXACTLY — определены максимальные размеры. View может быть настолько большим, насколько хочет, но до указанного размера.
Вопрос 14
Linux Kernel
Linux Kernel (ядро линукс) — этот слой обеспечивает функционирование системы и отвечает за безопасность, управление памятью, процессами, а также предоставляет сетевой стек и модель драйверов (Display Driver, Camera Driver и другие драйвера).
Libraries (библиотеки) — это промежуточный слой программного обеспечения, предназначенный для обеспечения базового функционала для приложений, таких как поддержку файловых форматов, осуществление кодирования и декодирования информации (например, кодеки), отрисовку графики и многое другое (Surface Manager, Media Framework, SQLite и др.).
Android Runtime — располагается на одном уровне с Libraries. Ключевыми компонентами здесь являются Dalvik VM и ряд библиотек ядра (Core Libraries).
Application Framework — уровень каркаса приложений. Именно через каркасы приложений разработчики получают доступ к API, лежащими ниже уровнем. Сюда входят: ActivityManager, Package Manager, Window Manager и др.
Applications — уровень приложений, как базовых (предустановленных на ОС: браузер, календарь, контакты и пр.), так и установленных пользователем.
На заметку, авторы квиза олдскулы, т.к. в официальной документации слои выделены иным способом: source.android.com/devices/architecture.
Вопрос 15
invokeabstract
goto — переход к другой инструкции.
invokeinterface — используется для вызова методов интерфейса.
invokestatic — используется для вызова static-методов.
Автор: dv1zh0k