Android Interview Review

@AndroidSobes Нравится 2 1 500

Популярные вопросы и ответы с собеседований на Android-разработчика.
Канал для Java-разработчиков @JavaSobes
Связаться с нами @SobesAdmin
https://itsobes.ru
Гео и язык канала
Россия, Русский
Категория
Образование


Написать автору
Гео канала
Россия
Язык канала
Русский
Категория
Образование
Добавлен в индекс
18.03.2019 05:12
реклама
Telegram Analytics
Подписывайся, чтобы быть в курсе новостей TGStat.
SearcheeBot
Ваш гид в мире Telegram-каналов
TGAlertsBot
Мониторинг упоминаний ключевых слов в каналах и чатах.
3 322
подписчиков
~2.5k
охват 1 публикации
~1.2k
дневной охват
~3
постов / нед.
76.7%
ERR %
7.9
индекс цитирования
Репосты и упоминания канала
24 упоминаний канала
6 упоминаний публикаций
0 репостов
Android Live 🤖
Kazakh in Cardiff (I was)
Android Live 🤖
Java Interview Review
Java Interview Review
Программист
Продакшн
Clean Code
Новые каналы
Java Interview Review
Clean Code
Kosmos Time | Наука | Физика
Next Time
Android Live 🤖
Лысый из браузера
Java Interview Review
Говнокод
Clean Code
Типичный программист
Coding
Типичный программист
Библиотека джависта
Java Interview Review
IT Юмор
Программист
Говнокод
Каналы, которые цитирует @AndroidSobes
Primary Key
امبدد آکادمی
خداحافظ مجازی
Android Live 🤖
Primary Key
Java Interview Review
Android Broadcast
Java Interview Review
Android books channel🤖
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
HYPE.TECH
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Лысый из браузера
Android Live 🤖
Java Interview Review
Java Interview Review
Java Interview Review
Style
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Java Interview Review
Последние публикации
Удалённые
С упоминаниями
Репосты
Как Андроид масштабирует 9-Patch?

Андроид может увеличивать 9-Patch, но не уменьшать. Поэтому чем меньше оригинальный размер картинки, тем лучше.

Для вычисления цвета новых пикселей не применяется интерполяция. Увеличение размера достигается дублированием оригинальных пикселей в размеченных областях. Каждый новый пиксель в масштабированном изображении имеет цвет одного из оригинальных пикселей.

Если 9-Patch имеет несколько размеченных областей, то каждая область увеличивается пропорционально.

#Resources
Читать полностью
Что такое 9-Patch Drawable?

9-Patch – это специальный формат, который используется в Андроиде для эффективного хранения PNG-картинок.
9-Patch хранит в себе информацию о паддингах и о том, как можно растянуть картинку.

Реализуется это с помощью рамки толщиной в один пиксель, изображенной вокруг оригинальной картинки. Части рамки, окрашенные в черный цвет, задают поведение 9-Patch.

Левая и верхняя границы задают область, которая может быть растянута. Незакрашенная часть сохранит размер оригинальной картинки.

Правая и нижняя границы контролируют расположение контента. Незакрашенная область становится паддингом.

#Resources
Читать полностью
Выпуск подкаста Подлодка об увольнениях:

https://podlodka.io/169

И тезисы на эту тему:

http://sharovatov.github.io/entries/2020-06-firing.html
Podlodka #169 – Увольнения
Мы в Podlodka уже много обсуждали карьеру разработчика: как искать работу, и то, как проходить собеседование и то, как развиваться в той или иной роли. Но есть еще один важный этап рабочего цикла, с которым рано или поздно может столкнуться каждый — увольнение. Как сделать так, чтобы вне зависимости от того, кто его инициировал, этот процесс оказался максимально выгодным для обеих сторон? Знание своих прав — ключ к успеху в таких сложных переговорах и разобраться во всех правовых и организационных нюансах увольнений нам помог Виталий Шароватов из Рокетбанк.
Что такое RemoteViewsService?

RemoteViewsService используется для создания виджетов (App Widget), которые отображают коллекции элементов.

На стороне UI такие виджеты используют одну из следующих view:

• ListView – для отображения обычного списка элементов;
• GridView – располагает элементы коллекции в виде сетки;
• StackView – элементы перекрывают друг друга.
• AdapterViewFlipper – анимируется при переключении между элементами.

Доступ к данным, которые виджет показывает в виде коллекции, предоставляется через ContentProvider.
В качестве адаптера выступает класс, реализующий интерфейс RemoteViewsFactory. Этот класс является прослойкой между данными в ContentProvider и UI-коллекцией. В качестве элементов коллекции выступают объекты RemoteViews.

RemoteViewsService – это сервис, который который связывает виджет с определенной реализацией RemoteViewsFactory.

Для создания виджета с коллекцией необходимо реализовать интерфейс RemoteViewsFactory и абстрактный класс RemoteViewsService.

Пример реализации можно найти здесь.
Полное описание реализации виджета с коллекцией в документации.

#Widget
Читать полностью
Что такое RemoteViews?

Класс RemoteViews описывает иерархию View, которая может отрисовываться в другом процессе. Например RemoteViews используются при создании виджета или кастомного лэйаута для нотификации.
При создании объекта RemoteViews в конструктор передается id лэйаута и имя пакета, в котором этот лэйаут хранится.

RemoteViews позволяет обрабатывать клик ивенты. Реализуется это не с помощью листенера, а через PendingIntent.
Метод RemoteViews.setOnClickPendingIntent(viewId: Int, pendingIntent: PendingIntent) выставляет PendingIntent, который будет вызван при клике на view с соответствующим id.

#View
Читать полностью
Какие ограничения виджетов вы знаете?

Во-первых, виджеты ограничены по жестам, которые они могут обрабатывать. Доступны только touch и вертикальный swipe. Горизонтальный swipe доставляется приложению-хосту, например домашнему экрану.

Во-вторых, виджеты поддерживают только следующие лэйауты: FrameLayout, LinearLayout, RelativeLayout, GridLayout. Набор view тоже ограничен (полный список в документации).
Причина этого в том, что лэйауты виджетов основаны на RemoteViews.

#Widget
Читать полностью
Назовите методы жизненного цикла виджета

В этом посте говорим об App Widget, а не о классах из пакета widget.

Виджет имеет следующие методы жизненного цикла:

onEnabled() – вызывается, когда пользователь добавляет на home screen первый инстанс виджета. При добавлении новых инстансов того же типа, onEnabled() вызываться не будет.
В этом методе следует выполнять общие для всех инстансов виджета операции инициализации.

onUpdate() – вызывается при добавлении инстанса виджета. Также вызывается периодически через интервал времени, который был задан в AppWidgetProviderInfo.
Этот метод используется для инициализации и обновления состояния.

onAppWidgetOptionsChanged() – вызывается при добавлении и при изменении размера.

onDeleted() – вызывается при удалении инстанса виджета.

onDisabled() – вызывается при удалении всех инстансов виджета. В этом методе следует освобождать ресурсы, созданные при инициализации в методе onEnabled().

#Widget
Читать полностью
Описание малоизвестной, но полезной функциональности Android Studio

https://www.jetbrains.com/help/idea/pro-tips.html

#пятница
Назовите частые причины проблем с производительностью UI и как их решать

Две основные причины проблем с перформансом отрисовки лэйаутов:

• Глубокая вложенность. Плоские лэйауты отрисовываются быстрее, чем вложенные с тем же количеством View.

Double taxation. Так называется ситуация, когда для лэйаута шаги onMeasure() и onLayout() вызываются дважды. Например, double taxation случается при использовании атрибута weight в LinearLayout.


Для того, чтобы избежать проблем с производительностью следует придерживаться следующих правил:

• LinearLayout c текстом и картинкой следует заменять на TextView с Compound Drawable.

• Если в качестве корневого лэйаута используется FrameLayout без кастомизированных атрибутов, то его можно заменить тегом .

• Использовать для лэйаутов, которые вкладываются в другие лэйауты;

• Использовать ConstraintLayout вместо RelativeLayout.

• Быть осторожным с атрибутом layout_weight в LinearLayout и не использовать layout_weight в нескольких вложенных лэйаутах.

#View
Читать полностью
Интересный пост о том, как Stack Overflow нанимает разработчиков

https://stackoverflow.blog/2020/07/03/how-stack-overflow-hires-engineers/

#пятница
Как атрибут weight влияет на перформанс?

Для начала вспомним, как отрисовывается дерево view. При отрисовке любого лэйаута вызываются методы onMeasure(), onLayout() и onDraw().

На шаге onMeasure() лэйаут передает желаемые значения размеров каждой дочерней view. View сохраняет размеры, которые позже используется при вызове onLayout().

При вызове onLayout() дочерние view располагаются на лэйауте с использованием размеров, полученных на шаге onMeasure().

На шаге onDraw() происходит отрисовка дерева view.

Обычно в LinearLayout каждый из этих методов вызывается один раз, но при использовании атрибута weight – фаза onMeasure() выполняется в два прохода. В этом случае перформанс LinearLayout становится таким же как у RelativeLayout.

#View
Читать полностью
Первая половина 2020-ого - то ещё время!😱 Проведите вторую половину лучше!😉 Освойте востребованную профессию в сфере IT, начните зарабатывать больше и заведите новых друзей!

9 июля на платформе Skill-Branch стартует новый поток курса Middle Android Developer!💥

Обновлённый практический курс, который позволит разработчикам продвинуться по карьерной лестнице!🚀

Если вы:
• готовы расти профессионально
• хотите прокачать уровень разработки и зарабатывать больше
• претендовать на вакансии крупнейших IT-компаний

…подайте заявку на обучение здесь 👉🏼
Перейти на сайт

Android Middle Developer от Skill-Branch – это:

• 9 месяцев практико-ориентированного обучения
• 300+ часов продвинутого изучения Android-разработки уровня Middle
• Проектирование архитектуры приложений
• Актуальные технологии и инструменты, их применение в современной разработке
• Kotlin, RxJava, Gradle, Mockito, Firebase, Espresso, ML Kit, GraphQL
• Углубленное изучение Dagger 2 и RxJava 3, а также процессов тестирования Android-приложений
• Code Review вашего проекта практикующими специалистами
• Спикеры из Yandex, МТС, HH и других крупных компаний
• Сертификат и 2 Android-приложения в портфолио, подтверждающие профессиональный уровень

⚡️Действует рассрочка до 24 мес.
⚡️Программа лояльности и скидки
⚡️Обучение за счёт работодателя

⚠️Количество мест ограничено!

Переходите по ссылке и записывайтесь на обучение сейчас!
Читать полностью
Что задает атрибут weight в LinearLayout?

Атрибут layout_weight указывает какую часть лэйаута займет view. В лэйауте с вертикальной ориентацией weight влияет на высоту view, а с горизонтальной – на ширину.

Размер пространства, которое занимает view, прямо пропорционален весу.
Допустим, в лэйауте есть три view. View A имеет вес 0.5, View B – 0.3, View C – 0.2. Сумма весов равна 1. В этом случае размеры view будут соответственно 50%, 30% и 20% от свободного в лэйауте места.

#View
Читать полностью
В чем разница между Data Binding и View Binding библиотеками?

Data Binding библиотека реализует два подхода. Собственно сам data binding, т.е. связывание данных и view, а также view binding – связывание view в xml и в коде. Библиотека Data Binding была создана несколько лет назад и имеет ряд недостатков.

View Binding – относительно новая библиотека, которая поставляется в Android Jetpack. Как следует из названия, эта библиотека предоставляет только решение для связывания xml и кода. Основное преимущество View Binding перед Data Binding – это скорость сборки. Помимо этого с View Binding в лэйаутах не нужно использовать тэг

#Jetpack
Читать полностью
Как задать отступ у Compound Drawable?

C помощью метода TextView.setCompoundDrawablePadding(padding: Int) можно задать padding между текстом и картинкой. Значение, которое задается этим методом, применяется ко всем Compound Drawables в TextView. Это самое неудобное ограничение при использовании Compound Drawables.

Один из способов добавить различные отступы для разных картинок или сдвинуть картинку относительно центра – использовать drawable-ресурс inset. В inset задается оригинальный drawable-ресурс и отступы по всем сторонам.

#View
Читать полностью
Что такое Compound Drawable?

Compound Drawable – это картинка (drawable-ресурс), которую можно добавить в TextView.
Часто совместные картинка и текст верстаются с помощью LinearLayout, но использование Compound Drawable более эффективно.

Для добавления Compound Drawable используется метод TextView.setCompoundDrawable(left: Drawable?, top: Drawable?, right: Drawable?, bottom: Drawable?). Drawable-объект передается в соответствующий параметр, который задает положение относительно текста. В остальные параметры передается null.

#View
Читать полностью
Чем CoordinatorLayout отличается от FrameLayout?

CoordinatorLayout входит в Android Jetpack. CoordinatorLayout позиционируется как улучшенный FrameLayout.

CoordinatorLayout позволяет контролировать взаимодействие дочерних View между собой. Одна из задач, которая решается с помощью CoordinatorLayout – скрыть ActionBar при скролле вниз и показать при скролле вверх.

Для настройки поведения дочерних View используются Behaviors-атрибуты.
Кроме существующих реализаций Behaviors, таких как AppBarLayout.ScrollingViewBehavior, можно создавать кастомные. Для этого необходимо создать наследника класса CoordinatorLayout.Behavior и указать полное имя класса в атрибуте app:layout_behavior.

#View
#Jetpack
Читать полностью
Какие лэйауты существуют в Android?

Основные лэйауты в Андроиде:

• FrameLayout. Каждая следующая View во FrameLayout отрисовывается поверх предыдущей.

• LinearLayout имеет два режима, которые задаются атрибутом orientation: vertical и horizontal. В horizontal режиме каждая следующая View отрисовывается правее предыдущей, в vertical – ниже предыдущей.

• GridLayout. View располагаются на сетке (таблице) с заданным количеством строк и столбцов.

• RelativeLayout позволяет располагать View друг относительно друга, задавая атрибуты View.

• ConstraintLayout подключается как отдельная библиотека из Android Jetpack и не входит в Android SDK. Является более мощной и эффективной заменой RelativeLayout.

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