Спрос на Android-разработчиков весьма велик сейчас. Я решил подготовить список того, что нужно знать каждому разработчику под эту платформу. Это не только то, что вас могут спросить на собседовании, а весь спектр знаний, который скорее всего пригодится в работе. Бонусом идет пара интерсных вопросов про платформу.
В качестве бонуса полезно знать:
1. Есть Task 1, Task 2. В первом есть Activity A, на вершине — Activity B. Из Task 2 посылается intent на запуск Activity A, при этом у A в манифесте указан тип запуска = «singleTask». Что произойдет с Task 1? Как будет выглядеть стек Activity в Task 1? Что произойдет при нескольких нажатиях на кнопку Back?
2. Есть сервис, который был запущен через binding с Activity. Что произойдет с сервисом, когда пользователь покинет соответствующую Activity? Что нужно сделать, чтобы изменить это поведение?
3. Внутри Activity определен
Ответы на вопросы будут в комментариях.
Материал для подготовки:
Android Dev Guide
P.S. Буду рад расширению данного списка.
Платформа Android:
- Файл
AndroidManifest.xml
: зачем нужен, необходимые параметры, секции. Здесь нужно рассказать про таг<manifest>
и<application>
, рассказать про параметр packageName, про <uses-feature> и <uses-permission>, про компоненты приложения, которые указываются. - Структура проекта: assets, res, src, gen, libs. Что лежит в каждой папке, что должно лежать под версионным контролем, а что нет(папка gen никогда не кладется в VCS). Соответственно ассеты, ресурсы(картинки, музыка, лэйауты), java-код, сгенеренный код, библиотеки.
- Компоненты приложения.
Activity
,Service
,BroadcastReceiver
,ContentProvider
. Зачем нужен каждый, как осуществляется работа, lifecycle каждого компонента. - Особенности запуска
Activity
иService
. Что такоеTask
,Activity Stack
. Как принимается решение о запуске процессаService
. ContentProvider
, зачем нужен, как используется. Доступ и использованиеContentResolver
. Работа с курсорами. Помнить про managed cursors.BroadcastReceiver
: статические и динамические, механизмы вызова, lifecycle.- Межпроцессное взаимодействие. Что такое и зачем нужен
Intent
, как передавать информацию с его помощью, что такоеBundle
и зачем нуженParcelable
.IntentFilter
и для чего применяется. Способы взаимодействияActivity
иService
(старт, биндинг). AIDL(Android interface definiotn language). - Построение UI приложения. Что такое
Layout
иView
, какие бывают типы layout'ов(4 штуки), зачем они применяются. Оптимизация UI под различные размеры экранов и плотность пикселей(использование dp). - Хранение данных в платформе: 4 типа. Internal, External Storage, DB, SharedPreferences. Варианты использование, отличия.
- Локализация. Встроенные средства платформы для локализации, моменты выбора локали.
- Виджеты. Механизм создания виджетов, доступные средства UI в них. Что такое
AppWidgetProvider
. - Работа в фоне. Когда использовать
Service
, когдаAsyncTask
. Что такоеAsyncTask
, его связь с UI. СущностьIntentService
— что делает и чем полезна. - Модель безопасности в Android. Разрешения.
- Использование телефонных средств: сенсоров, вибрации, GPS.
- Новинки платформы:
Loaders
,Fragments
, In-app billing. - Производительность в платформе: best practices. Неиспользование enums до 2.2, использование final и проч. Особенность работы на мобильном: ограничение по памяти и процессоу.
- Поддержка старых версий платформы: доступ до функциональности через Reflection.
- Собственные views: механизмы отрисовки, Canvas.
- Состояния компонент: какие компоненты системы могут сохранять состояния(Activity и View), способы сохранения и восстановления состояний, отличия механизмов для Activity и View.
В качестве бонуса полезно знать:
- Механизмы подписи приложений для публикации в Android Market.
- Android NDK: вызов нативного кода
- Фреймворки для разработки под различные мобильные OS: Titanium, PhoneGap и прочие.
Core java. Все то, что нужно обычному java-разработчику.
- Наследование в java, интерфейсы, абстрактные классы, классы, внутренние и анонимные. Множественное наследование интерфейсов, когда применяется. Замыкания.
- Модификаторы в java: доступа, синхронизации, прочие(static и final). Влияние final на производительность.
- Collections: типы коллекций(
List
,Set
,Map
). Различные реализации, применимость коллекций в тех или иных случаях. Сложность вставки, чтения и поиска в различных реализациях. - Многопоточность: потоки, способы синхронизации, методы wait и notify. Ключевое слово
synchronized
, когда используется, что означает. - Отличия библиотеки классов Java SE и платформы Android.
Несколько интересных вопросов про платформу:
1. Есть Task 1, Task 2. В первом есть Activity A, на вершине — Activity B. Из Task 2 посылается intent на запуск Activity A, при этом у A в манифесте указан тип запуска = «singleTask». Что произойдет с Task 1? Как будет выглядеть стек Activity в Task 1? Что произойдет при нескольких нажатиях на кнопку Back?
2. Есть сервис, который был запущен через binding с Activity. Что произойдет с сервисом, когда пользователь покинет соответствующую Activity? Что нужно сделать, чтобы изменить это поведение?
3. Внутри Activity определен
BroadcastReceiver
как нестатический внутренний класс. Сможет ли такой ресивер получать интенты? Почему?Ответы на вопросы будут в комментариях.
Материал для подготовки:
Android Dev Guide
P.S. Буду рад расширению данного списка.