1. Что такое ANR?
Application Not Responding – диалоговое окно, которое возникает в случае, если приложение не отвечает на действия пользователя более чем 5 сек.
2. В каком методе жизненного цикла может возникнуть ANR?
ANR может возникнуть в любом методе жизненного цикла Activity или Fragment, вне зависимо от того, взаимодействует пользователь с UI приложения или нет.
3. Если на телефоне отсутствую Google Play Services, что произойдёт при вызове карты в приложении?
Вместо карты отобразится TextView, в котором будет написано, что Google Play services не поддерживаются на данном устройстве.
4. Отличие интерфейса Parcelable от Serializable?
Serializable – это стандартный интерфейс Java. Помечая класс как Serializable, он будет автоматически осуществлять операции сериализации/десериализации.
Parcelable – интерфейс, входящий в состав Android SDK, в котором необходимо самостоятельно описать логику сериализации/десериализации. Интерфейс Parcelable создан эффективнее, чем Serializable, и не использует рефлексию. При передачи объектов между Activity, работает значительно быстрее Serializable.
5. Какой метод вызовется при запуске Activity с флагом single_top?
В Activity вызовется метод onNewIntent(), который будет содержать новый Intent. Для того, чтобы применить новый Intent, необходимо вызвать метод setIntent().
6. Где можно хранить кэш в Android приложении?
В зависимости от типа и размера данных, можно использовать следующие возможности:
– Shared Preferences
– SQLite
– Internal Storage
– External Storage
7. Отличие Dalvik от Art?
Главное отличие в способе компиляции программ на Android. Виртуальная машина Dalvik работает по принципу JIT(Just In Time), т.е. компиляция приложения происходит во время работы приложения. С версии Android 4.4 на замену пришёл Art (Android RunTime), компиляция приложения происходит непосредственно во время установки, это увеличивает время установки приложения и занимаемый размер, но оптимизирует скорость работы самого приложения.
8. Почему мы вызываем метод setContentView() в методе onCreate() жизненного цикла Activity?
Метод setContentView() является ресурсоёмкой операцией и т.к. метод жизненного цикла onCreate() вызывается единожды, он является самым подходящим местом. Вызывая метод setContentView() например, в onResume() приведет к падению производительности и юзабилити приложения.
9. Что такое MultiDex?
Android приложение содержит большое количество созданных нами методов и их количество увеличивается при подключении к приложению библиотек, таких как Dagger, Retrofit и др. Dex файл имеет ограничения, и если суммарное количество методов превышает 65,536, то мы получим примерную ошибку:
Too many field references: 113000; max is 65536. You may try using --multi-dex option. Unable to execute dex: method ID not in [0, 0xffff]: 65536 Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
Для того чтобы избежать проблемы, необходимо подключить к нашему проекту возможность использовать несколько Dex файлов (поддержку MultiDex). Для этого нужно подключить к проекту библиотеку “com.android.support:multidex:1.0.3”, в файле build.gradle добавить параметр “multiDexEnabled true” и унаследовать наш Application класс от класса MultiDexApplication.
10. Что такое ADB?
Android Debug Bridge – утилита, которая является частью Android SDK. При помощи нее, можно взаимодействовать со смартфоном, подключенным к ПК через USB кабель. При помощи консольных команд, можно копировать/удалять файлы, делать отчеты о работе системы, читать логи системы и т.д.
11. Что такое AAPT?
Android Asset Packaging Tool – утилита, которая является частью Android SDK. Предназначена для компиляции ресурсов приложения (xml, png, jpg и т.д.) в бинарный вид, создания для них класса R с уникальными идентификаторами и упаковки их в файл apk.
12. Что такое JNI?
Java Native Interface – механизм, который позволяет использовать более низкоуровневый код в Android приложении, наприме С/С++ или Assembler. Интерфейс JNI дает возможность вызвать функции С/С++ из программы на Java, и наоборот.
13. Что такое NDK?
Native Development Kit – набор инструментов, который позволяет реализовывать части приложения используя языки C и C ++. Используется для увеличения производительности кода, программирование на низком уровне или для подключения к приложению библиотки, которая уже была написана на языке С.