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

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

Паттерн MVVM

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

Читать полностью

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

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

Читать полностью

Паттерн MVP

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

Читать полностью

Паттерн MVC

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью

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

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

Читать полностью