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

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

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

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

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

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

Читать полностьюДля чего нужен атрибут weight в LinearLayout?

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

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

Читать полностьюНазовите отличия CoordinatorLayout от FrameLayout

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

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

Читать полностьюКакие вы знаете layout в Android?

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

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

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

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

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

Читать полностьюРасскажите про Database View в Room

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

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

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

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

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

Читать полностьюОбъединение нескольких LiveData в Android

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

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

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

Паттерн MVVM

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

Читать полностьюПаттерн MVVM

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

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

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

Паттерн MVP

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

Читать полностьюПаттерн MVP

Паттерн MVC

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

Читать полностьюПаттерн MVC

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

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

Читать полностьюРасскажите про Android Jetpack

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

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

Читать полностьюРасскажите про Consumer ProGuard

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

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

Читать полностьюНазовите отличия invalidate() от requestLayout()

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

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

Читать полностьюРасскажите про SparseArray

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

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

Читать полностьюОтличия Schedulers⁠ от Schedulers⁠.computation() в RxJava?

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

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

Читать полностьюРасскажите про Handler

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

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

Читать полностьюРасскажите про Looper