- PVSM.RU - https://www.pvsm.ru -
Сегодня разбираем Android quiz с конференции для мобильных разработчиков Mobius 2018 Moscow.
Формат был довольно стандартный: 15 вопросов по 4 варианта ответа. Временной лимит 30 секунд на каждый вопрос.
Поехали!
Astra boy/Bender
Всем известно, что каждая новая версия Android получает кодовое наименование на тему сладостей и присваиваются они в алфавитном порядке (Cupcake, Donut, Eclair и т.д.).
Однако, первоначально, разработчиками планировалось давать версиям названия, используя вымышленные имена роботов. Поэтому, первые версии Android носили имя Astra boy и Bender. Это были внутренние релизы еще до выпуска безымянной версии 1.0. Однако, по определенным причинам вектор сменился и версию 1.1 было решено назвать Petit Four. Это была первая сладкая версия Android. А уже начиная со следующей версии (Cupcake 1.5), имена начали присваивать соблюдая алфавитный порядок.Источник [1]
Marshmallow
С выходом API 23 (Marshmallow) в Android ввели новое понятие runtime permissions. Эта фича должна была добавить прозрачности для пользователей к разрешениям выдаваемым приложению. До релиза “зефирки” выдача разрешений происходила в момент установки приложения.
Источник [2]
На заметку, Android содержит в себе более 100 [2] уникальных permissions.
measure()
measure() — вызывается для определения требований к размеру View и всех его дочерних элементов.
onMeasure() — вызывается из measure() для проведения фактической работы по определению размеров View.
onLayout() — вызывается для расположения элемента внутри контейнера
onDraw() — вызывается для отрисовки View контента.
Более подробную информацию по отрисовке View можно найти здесь [3].
isUserSmell()
В SDK отсутствует метод isUserSmell(). Возможно в будущем, с появлением на устройствах соответствующих датчиков…
Разберем что же делают остальные методы:
isUserMonkey() — метод предназначен для проверки является ли пользователь тестовым в рамках автоматизированного теста monkey [4].
isUserAGoat() — начиная с API 21, проверяет установлено ли приложение Goat Simulator GoatZ (“Симулятор козла”). На версиях ниже, метод всегда возвращает false. Располагается в классе
android.os.UserManager
.isFinalCountdown() — метод открывает клип группы Europa «The Final Countdown». Добавили его в API 26. Расположен в классе
android.widget.Chronometer
.
private static final int mobius = 2018
Здесь проверялось знание ключевого слова
const
, которое используется для объявленияcompile time constants
. В мире Java это соответствует модификаторамstatic final
.
sdpi
Если xhdpi и mdpi у разработчиков на слуху, то с tvdpi дела обстоят иначе. Популярности оно не снискало, а потому и устройств в категории tvdpi очень и очень мало, но они были. Наиболее известное из них — Nexus 7 (2012).
Источник [5].
На заметку, tvdpi имеет коэффициент 1.3 относительно mdpi.
Упаковывает все ресурсы и файлы в 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 приложения в общих чертах приведен в документации [6].
RIGHT OUTER JOIN
Из перечисленного не поддерживается RIGHT OUTER JOIN.
Источник [7].
2x
Name Density ldpi 0.75 mdpi 1 tvdpi 1.3 hdpi 1.5 xhdpi 2 xxhdpi 3 и 2.6 xxxhdpi 4 и 3.5
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 и Dalvik [8]
Кроме того, стоит отметить, что ART также включает в себя JIT компилятор, который дополняет AOT. Подробнее об этом здесь [9].
YAGNI
KISS (Keep It Simple, Stupid) — не усложняй!
DRY (Don’t repeat yourself), DIE (Duplication Is Evil) — не повторяйся!
WTF (количество “чёзана” в секунду) — единица измерения качества кода на ревью.
YAGNI (You aren't gonna need it) — вам это не понадобится!
Application Not Responding
ANR (Application Not Responding) — проблема, возникающая при невозможности основного потока приложения обрабатывать пользовательские события и перерисовывать UI.
В Android за отзывчивостью приложения наблюдают системные сервисы
ActivityManager
иWindowManager
. Если выполнится одно из нижеперечисленных условий:— нет реакции на события ввода (touch и key pressed события),
— BroadcastReceiver не завершит выполнение в течение 10 секунд,то система уведомит пользователя о проблеме, показав соответствующий диалог ANR [10].
Size & mode
MeasureSpec [11] предназначен для передачи требований к размерам от родителя к дочерним view компонентам. Эти требования составляются по двум измерениям: ширина и высота. Значения по каждому из измерений являются составными: первая часть содержит в себе информацию о доступном пространстве (в пикселях), вторая часть — ограничения на использование доступного пространства. Эти ограничения могут быть следующими:
MeasureSpec.UNSPECIFIED — ограничений нет, view может принимать любой размер, который ей потребуется.
MeasureSpec.AT_MOST — определены точные размеры, view будут даны именно эти границы.
MeasureSpec.EXACTLY — определены максимальные размеры. View может быть настолько большим, насколько хочет, но до указанного размера.
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 [12].
invokeabstract
goto — переход к другой инструкции.
invokeinterface — используется для вызова методов интерфейса.
invokestatic — используется для вызова static-методов.
Автор: dv1zh0k
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/303246
Ссылки в тексте:
[1] Источник: https://www.androidpolice.com/2012/09/17/a-history-of-pre-cupcake-android-codenames/
[2] Источник: https://developer.android.com/guide/topics/permissions/overview#dangerous-permission-prompt
[3] здесь: https://developer.android.com/guide/topics/ui/how-android-draws
[4] monkey: https://developer.android.com/studio/test/monkey
[5] Источник: https://material.io/tools/devices/
[6] документации: https://developer.android.com/studio/build/#build-process
[7] Источник: https://sqlite.org/omitted.html
[8] ART и Dalvik: https://source.android.com/devices/tech/dalvik
[9] здесь: https://source.android.com/devices/tech/dalvik/jit-compiler
[10] ANR: https://developer.android.com/topic/performance/vitals/anr
[11] MeasureSpec: https://developer.android.com/reference/android/view/View.MeasureSpec
[12] source.android.com/devices/architecture: https://source.android.com/devices/architecture
[13] Источник: https://habr.com/post/434210/?utm_campaign=434210
Нажмите здесь для печати.