Android собеседование

Познакомимся?
Android [Kotlin] для начинающих - изображение Иван Ветров

Разработчик по Android-разработке и Kotlin

Меня зовут Иван. Я автор уроков на YouTube по разработке Android-приложений под ником ievetrov

Здесь вы найдете видео и текстовые версии уроков по созданию Android-приложений. Все видео можно посмотреть на канале YouTube и VK. Обучение рассчитано на начинающих разработчиков, а также на тех, у кого совсем нет опыта в разработке мобильных приложений.

Научитесь создавать мобильные приложения для Android с нуля. Создание экранов, работа с UI, навигация между страницами. Первые приложения в портфолио для будущего трудоустройства.

Атрибут weight и его влияние на производительность

При использовании обычного LinearLayout каждый из on… методов View вызывается его дочерних View только по одному разу, что делает его довольно быстрым. Если же использовать атрибут weight, то метод onMeasure() будет вызван по 2 раза на каждом View. Это делает производительность LinearLayout такой же, как у RelativeLayout и как может показаться не создает никаких проблем. […]

Смотреть урок →

Для чего нужен атрибут weight в LinearLayout?

Это атрибут, который указывает то, какую часть экрана займет View по сравнению с другими View, у которых тоже указан данный атрибут. При этом в зависимости от атрибута orientation, данный атрибут будет влиять на разные параметры View. Если у LinearLayout стоит orientation = VERTICAL, то атрибут weight будет влиять на height (высоту) дочернего View. А если […]

Смотреть урок →

Назовите отличия CoordinatorLayout от FrameLayout

CoordinatorLayout можно представить как FrameLayout на максималках. Это улучшенная версия FrameLayout. CoordinatorLayout рассчитан на использование в двух основных случаях В качестве top-level декора приложения или же chrome layout Когда необходимо настроить взаимодействие между layout и его дочерними view либо между дочерними view layout’а Используя CoordinatorLayout.Behavior можно настроить поведение дочерних view и самого layout при взаимодействии […]

Смотреть урок →

Какие вы знаете layout в Android?

Из основных лэйаутов (прямых наследников ViewGroup) можно выделить следующие FrameLayout. Отрисовывает элементы друг поверх друга. LinearLayout Отрисовывает элементы друг за другом. У данного layout есть атрибут orientation, который задает направление, в котором будут отрисовываться дочерние View. Если данный атрибут имеет значение HORIZONTAL, то дочерние View будут отрисовываться горизонтально, друг за другом (обычно слева направо, но […]

Смотреть урок →

Расскажите про ViewGroup и View и в чем их различие?

ViewGroup – это класс, который наследуется от View. Он расширяет View и позволяет хранить в себе другие View, по сути это как контейнер. Все layout’ы являются ViewGroup. Так же этот класс будет базовым и для layout parameters. ViewGroup предоставляет невидимый контейнер для хранения других View (в том числе и других ViewGroup, не забываем, что ViewGroup […]

Смотреть урок →

Расскажите про Database View в Room

Начиная с версии 2.1.0 Room поддерживает SQLite database views. Database Views позволяют инкапсулировать запрос в БД внутри класса. Такие классы представляют из себя простенькие объекты с данными. Чтобы создать такой класс необходимо добавить аннотацию @DatabaseView к классу, а в качестве аргумента аннотации передать запрос, который данный класс должен представлять. Вот пример: А чтобы добавить данный […]

Смотреть урок →

Можно ли ViewModel заменить onSaveInstanceState()?

Не совсем. Вернее не всегда вьюмоделью можно заменить onSaveInstanceState(). Рассмотри такой случай, когда в нашей активити есть ViewModel, которая сохраняет наши данные. Так же эти же данные сохраняются в onSaveInstanceState(). Всего есть три варианта как будет создаваться активити: Активити запускается в первый раз. В таком случае никаких данный ни во ViewModel, ни в bundle savedInstanceState […]

Смотреть урок →

Объединение нескольких LiveData в Android

Для того, чтобы объединить несколько LiveData необходимо использовать класс MediatorLiveData. Данный класс умеет подписываться на обновления других LiveData. Для этого необходимо вызвать метод MediatorLiveData.addSource(). Он принимает в себя два аргумента: 1) Сама LiveData, на которую нужно подписаться 2) Observer, который будет вызываться при изменении элемента в этой LiveData. Вот пример того, как можно объединить две […]

Смотреть урок →

Особенности при подписке на LiveData во Fragment

Метод observe() класса LiveData принимает в качестве аргумента объект класса LifecycleOwner. Данный объект будет указывать, кто является владельцем данного Lifecycle, это необходимо чтобы колбек LifeData.observe() не триггерился когда LifecycleOwner еще не в активном состоянии (либо уже был вызван onDestory(), либо еще не был вызван onCreate() например). Во фрагментах лучшим решением будет передавать viewLifecycleOwner, если при […]

Смотреть урок →

Паттерн MVVM

MVVM, — шаблон проектирования архитектуры приложений. Он упрощает разделение разработки графического интерфейса (view) от разработки бизнесс-логики (model). ViewModel в данном шаблоне проектирования является промежуточным звеном, которое помогает преобразовывать данные таким образом, чтобы их было легко представлять и ими было легко манипулировать. ViewModel берет на себя практически всю логику представления данных, View остается их только отобразить. […]

Смотреть урок →

Какие есть недостатки паттерна MVP

Вот несколько минусов MVP в Android-разработке Круговая зависимость View и Presenter. У View есть ссылка на Presenter, а у Presenter есть ссылка на View. Обычно это не так плохо, но стоит вспомнить, что в Андроид View — это как правило активити или фрагмент, у которых есть жизненный цикл. Поэтому необходимо создавать новый презентер при создании […]

Смотреть урок →

Паттерн MVP

MVP (Model-View-Presenter) — как и MVC, является шаблоном проектирования архитектуры приложения. Данный паттерн произошел от MVC и многое унаследовал от него. Но есть и отличия. Слои Model и View по своей сути такие же как и в MVC, но вот вместо слоя Controller, в данном паттерне появился слой Presenter. Его функции и роль немного отличаются […]

Смотреть урок →

Паттерн MVC

MVC (Model-View-Controller) — шаблон проектирования архитектуры приложений. Он используется чтобы разделить логику всего приложения на три элемента, связанных друг с другом. Это позволяет разделить представление информации “внутри” приложения и то, как эту информация видит и вводит пользователь. Благодаря этому упрощается поддержка приложения “на большой дистанции”, то есть в долгосрочной перспективе такое приложение будет легче поддерживать […]

Смотреть урок →

Расскажите про Android Jetpack

Android Jetpack это набор библиотек от Google, призванный улучшить разработку под Андроид. Он помогает разработчикам приложений следовать хорошим шаблонам проектирования, уменьшает бойлерплейт код и также позволяет писать код, который будет стабильно работать на всех версиях андроид и на всех андроид устройствах(не забываем что на андроид могут работать не только телефоны и планшеты, а также например […]

Смотреть урок →

Расскажите про Consumer ProGuard

ProGuard это утилита, которая позволяет оптимизировать, уменьшить и запутать (то есть сделать байткод более запутанным, чтобы люди которые будут его расшифровывать не смогли понять зачем он нужен) код Java. В Android разработке данная утилита часто используется при сборке build type — release. Это позволяет уменьшить размер apk файла (proguard убирает неиспользуемый код из apk), улучшить […]

Смотреть урок →

Назовите отличия invalidate() от requestLayout()

requestLayout() и invalidate() — два метода, которые используются чтобы обновить View после его изменения. Но используются они для разных вещей. invalidate() это метод, который при вызове гарантирует что в когда-то в будущем (довольно скоро после вызова invalidate(), но не сразу) будет вызван метод onDraw(). То есть этот метод нужен чтобы запланировать (добавить в очередь) перерисовку […]

Смотреть урок →

Расскажите про SparseArray

SparseArray сопоставляет целые числа с объектами, и, в отличие от обычного массива объектов, его индексы могут содержать пробелы. По сути это мапа, где ключами являются целые числа. SparseArray предназначен для более эффективного использования памяти, чем HashMap SparseArray сохраняет свои пары ключ-значение в массивах, используя бинарный поиск для поиска ключей. Из-за этого он не предназначен для […]

Смотреть урок →

Отличия Schedulers⁠ от Schedulers⁠.computation() в RxJava?

Schedulers.computation( ) — это scheduler, предназначенный для выполнения вычислительной работы. Он основан на ограниченном числе потоков, по умолчанию равном количеству потоков процессора вашего компьютера. Каждая задача, которая поступает на этот scheduler помещается в очередь задач, каждый новый освободившийся поток берет первую задачу из очереди. Schedulers.io() — предназначен для работы, связанной с вводом-выводом, такой как например […]

Смотреть урок →

Расскажите про Handler

Handler с английского переводится как “обработчик”. Этот класс используется вместе с MessageQueue и Looper. Handler используется для работы с MessageQueue, потому что давать программистам доступ к самой очереди сообщений было бы небезопасно. Так что как связующее звено между программистом и очередью сообщений используется хендлер. Так же хендлер позволяет добавлять сообщения (объекты Message). Ну и собственно […]

Смотреть урок →

Расскажите про Looper

В обычных программах вызывается метод main() и исполнение программы завершается сразу после того как исполнится метод main(). Но в Андроид приложения зачастую вынуждены ожидать действий пользователя и только потом выполнять какое-либо действие. Для этого в Андроид используются три класса: Looper, MessageQueue и Handler Looper с английского переводится как “зацикливатель”. В обычном случае у потока есть […]

Смотреть урок →

Kotlin-практикум с Иваном Ветровым

Запишись бесплатно и получи приглашение на персональную работу

Бесплатная предзапись

Последние места в ближайшем потоке — старт завтра

  • Персональная работа с Иваном Ветровым 10 дней
  • 25 задач с персональным код-ревью
  • Настройка профессиональных инструментов
  • 3 проекта для портфолио + рекомендации
Подробнее про Onboarding
Специальное предложение - изучение Android разработки со скидкой