Pull to refresh

Это должен знать каждый

Reading time 3 min
Views 83K
Спрос на Android-разработчиков весьма велик сейчас. Я решил подготовить список того, что нужно знать каждому разработчику под эту платформу. Это не только то, что вас могут спросить на собседовании, а весь спектр знаний, который скорее всего пригодится в работе. Бонусом идет пара интерсных вопросов про платформу.


Платформа 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. Буду рад расширению данного списка.
Tags:
Hubs:
+109
Comments 21
Comments Comments 21

Articles