Сегодня разберем немного простых вопросов.
Что ты знаешь про lateinit?
Это один из самых спорных инструментов. Его или любят и везде используют или опасаются и яростно оберегают проект от подобного.
Довольно часто бывает, что мы хотим объявить переменную, но проинициализировать её позже. Конечно, можно сделать private var cat: String? = null, но что если переменная не должна быть null?
Тут нам поможет слово lateinit. Оно позволяет объявить переменную, но проинициализировать её в другом месте. И вот тут самый большой подвох. Может случиться так, что мы попробуем получить значение до того, как присвоим его переменной. И тогда мы получим UninitializedPropertyAccessException. Поэтому, если не уверены, то лучше предварительно проверять через this::cat.isInitialized (выражение вернет true или false), а потом уже пытаться получить значение.
Я отношусь к тем людям, которые предпочитают не использовать lateinit. Мы не роботы и обязательно случится так, что мы где-то попробуем получить значение раньше или что-то случится и в итоге приложение упадет с исключением.
Кстати, тут еще можно добавить, что lateinit как раз используется в даггере при инжекте объекта. Но тогда стоит ожидать, что собеседующий дальше спросит про даггер и перейдет к этой теме.
Что ты знаешь про lateinit?
Это один из самых спорных инструментов. Его или любят и везде используют или опасаются и яростно оберегают проект от подобного.
Довольно часто бывает, что мы хотим объявить переменную, но проинициализировать её позже. Конечно, можно сделать private var cat: String? = null, но что если переменная не должна быть null?
Тут нам поможет слово lateinit. Оно позволяет объявить переменную, но проинициализировать её в другом месте. И вот тут самый большой подвох. Может случиться так, что мы попробуем получить значение до того, как присвоим его переменной. И тогда мы получим UninitializedPropertyAccessException. Поэтому, если не уверены, то лучше предварительно проверять через this::cat.isInitialized (выражение вернет true или false), а потом уже пытаться получить значение.
Я отношусь к тем людям, которые предпочитают не использовать lateinit. Мы не роботы и обязательно случится так, что мы где-то попробуем получить значение раньше или что-то случится и в итоге приложение упадет с исключением.
Кстати, тут еще можно добавить, что lateinit как раз используется в даггере при инжекте объекта. Но тогда стоит ожидать, что собеседующий дальше спросит про даггер и перейдет к этой теме.
https://zen.yandex.ru/media/android_junior/dataklassy-v-kotline-623b8930e3bb621ab12ced3b?& — немного про дата-классы. То, что почти всегда спрашивают на собеседованиях.
Дзен | Статьи
Дата-классы в котлине.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Вопрос, кстати, довольно популярный. Среди джуниоров точно, но и повыше уровнем встречается. Давайте попробуем ответить.
Как запустить компонент андроида в другом процессе?
Тут нам поможет android:process="имя_процесса" в манифесте.
Обычно все компоненты приложения выполняют в процессе, созданным для приложения. Но бывают ситуации, когда нужно какой-то компонент вынести в другой процесс. За три года моей работы я встречала такое только один раз. Но встречала же, так что вполне реальная ситуация.
Если имя указанного процесса начинается с ':', то создается новый процесс. Если двоеточия нет, то будет выполняться в существующем процессе с таким именем. Так разные компоненты в разных приложениях могут использовать один процесса, тем самым сокращая потребление ресурсов.
Новый процесс — достаточно тяжелое действие, так что лучше его не использовать, если это не необходимо.
Тут нам поможет android:process="имя_процесса" в манифесте.
Обычно все компоненты приложения выполняют в процессе, созданным для приложения. Но бывают ситуации, когда нужно какой-то компонент вынести в другой процесс. За три года моей работы я встречала такое только один раз. Но встречала же, так что вполне реальная ситуация.
Если имя указанного процесса начинается с ':', то создается новый процесс. Если двоеточия нет, то будет выполняться в существующем процессе с таким именем. Так разные компоненты в разных приложениях могут использовать один процесса, тем самым сокращая потребление ресурсов.
Новый процесс — достаточно тяжелое действие, так что лучше его не использовать, если это не необходимо.
👍1
Разбираем сложности — https://zen.yandex.ru/media/android_junior/chto-ty-znaesh-pro-dalvik-i-art-623720033c14f46c081849fe
Дзен | Статьи
Что ты знаешь про Dalvik и Art?
Статья автора «Блог Android-разработчицы» в Дзене ✍: Сейчас будет сложно. Dalvik и Art — это две виртуальные машины, которые были разработаны специально для Android.
❤1
Вспоминаем основное про манифест.
Обычно про него задают довольно поверхностные вопросы, так что кратко пройдемся. Впрочем, много про него и не рассказать.
Манифест — то, что должно быть в каждом приложении. Там описывается основная информация о нашем приложении для ОС Андроид, Google Play и инструментов сборки.
В манифесте обязательно должны быть указаны:
— Компоненты, которые мы используем, и их имена. Если не укажем, то система не сможет стартовать компонент. Интент-фильтры, если используем.
— Необходимые разрешения, в которых приложение нуждается. А еще разрешения, которые другие приложения должны иметь, чтобы получить доступ к данным нашего приложения. Начиная с 6 андроида пользователь может отклонять какие-то разрешения в рантайме. Но мы все равно должны указать их в манифесте.
— Различные требования к девайсам, которые необходимы для корректной работы приложения. Например, минимальная версия системы.
Что можно спросить?
— Что за интент-фильтры?
— А что там с разрешениями? Какие знаешь и какие нужны?
Обычно про него задают довольно поверхностные вопросы, так что кратко пройдемся. Впрочем, много про него и не рассказать.
Манифест — то, что должно быть в каждом приложении. Там описывается основная информация о нашем приложении для ОС Андроид, Google Play и инструментов сборки.
В манифесте обязательно должны быть указаны:
— Компоненты, которые мы используем, и их имена. Если не укажем, то система не сможет стартовать компонент. Интент-фильтры, если используем.
— Необходимые разрешения, в которых приложение нуждается. А еще разрешения, которые другие приложения должны иметь, чтобы получить доступ к данным нашего приложения. Начиная с 6 андроида пользователь может отклонять какие-то разрешения в рантайме. Но мы все равно должны указать их в манифесте.
— Различные требования к девайсам, которые необходимы для корректной работы приложения. Например, минимальная версия системы.
Что можно спросить?
— Что за интент-фильтры?
— А что там с разрешениями? Какие знаешь и какие нужны?
👍1
https://zen.yandex.ru/media/id/5ddd77e9f4882e4380666d35/62409bac1717ba751231bc2d — немного про даггер
Дзен | Статьи
Dagger. Вопросы на собеседовании.
Статья автора «Блог Android-разработчицы» в Дзене ✍: На самом деле меня никогда не спрашивали о таком, но я много читала, что на собеседованиях вопросы часто встречаются. Попробуем поразмышлять.
Доброе утро :) Немного про солид — https://zen.yandex.ru/media/android_junior/solid--bukovki-kotorye-sprosiat-na-liubom-sobesedovanii-624dd0386fbedf720e838a6e
Дзен | Статьи
SOLID — буковки, которые спросят на любом собеседовании.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Что это вообще за буквы и почему они так важны?
Очень кратко про рефлексию.
Рефлексия — это специальное API, которое позволяет получить доступ к данным приложения во время выполнения.
С помощью рефлексии мы можем узнать кучу всего о классах, методах и т.п. А еще мы можем получить приватные поля и даже изменить их значения. И можем создавать экземпляры класса прямо во время выполнения.
Рефлексия работает через java.lang.Class. JVM создает его для каждого объекта и именно через него мы можем всё делать.
Почему не любят рефлексию? Чуть выше я писала, что так мы можем получать доступ к приватным полям и менять значения. И тут мы напрочь ломаем инкапсуляцию и архитектуру приложения. Плюс дополнительно из-за того что мы все делаем динамически, снижается производительность. Ну и код, написанный с помощью рефлексии, довольно сложный и запутанный.
Рефлексия — это специальное API, которое позволяет получить доступ к данным приложения во время выполнения.
С помощью рефлексии мы можем узнать кучу всего о классах, методах и т.п. А еще мы можем получить приватные поля и даже изменить их значения. И можем создавать экземпляры класса прямо во время выполнения.
Рефлексия работает через java.lang.Class. JVM создает его для каждого объекта и именно через него мы можем всё делать.
Почему не любят рефлексию? Чуть выше я писала, что так мы можем получать доступ к приватным полям и менять значения. И тут мы напрочь ломаем инкапсуляцию и архитектуру приложения. Плюс дополнительно из-за того что мы все делаем динамически, снижается производительность. Ну и код, написанный с помощью рефлексии, довольно сложный и запутанный.
Немного про фрагменты — https://zen.yandex.ru/media/android_junior/fragment-i-ego-jiznennyi-cikl-6244b24dbbdad86f49814af1
Дзен | Статьи
Фрагмент и его жизненный цикл.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Изначально фрагменты придумали когда-то давно (в android 3), потому что люди стали пользоваться планшетами и там приложения растягивались и...
Небольшие итоги по собеседованиям — https://zen.yandex.ru/media/android_junior/itogi-testovyh-sobesedovanii-6266fce322e6cb08a4fbb5bc
Дзен | Статьи
Итоги тестовых собеседований.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Недавно я проходила несколько тестовых собеседований. Цель была довольно простой: понять какие есть пробелы и пообщаться с другими разработчиками.
👍4
А я наконец-то попробовала новый datastore. Он и правда такой удобный, как о нём все рассказывают — https://zen.yandex.ru/media/android_junior/poprobovala-preferences-datastore-627d310bdc17f5097db75395?&
Дзен | Статьи
Попробовала Preferences DataStore
Статья автора «Блог Android-разработчицы» в Дзене ✍: В начала года Google представил новый вариант сохранения взамен SharedPreferences.
Вчера немного занималась UI и поняла, что многие не помнят про такую крутую штуку как Barrier и продолжают оборачивать вьюшки в дополнительные Layout — https://zen.yandex.ru/media/android_junior/zachem-nujen-barrier-uproscaem-verstku-v-constraintlayout-6282920d4434fb3ce4981c50
Дзен | Статьи
Зачем нужен Barrier? Упрощаем верстку в ConstraintLayout.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Часто бывает такая ситуация: мы используем ConstraintLayout и там есть какой-то ряд элементов и под ним еще один элемент.
👍1
https://www.educative.io/courses/grokking-the-behavioral-interview — закончила курс по подготовке к собеседованию. Он бесплатный, поэтому многого я не ожидала от него, но на самом деле довольно хороший. Не зря educative советуют для подготовки.
Из интересного: очень много вопросов, которые вам могут задать, примеры ответов на них и возможность самостоятельно записать ответ на видео и посмотреть как ты выглядишь.
Из минусов: сертификат никак не купить. У меня не сработал ни один способ. Но тут уж сайт не виноват. 😔
Из интересного: очень много вопросов, которые вам могут задать, примеры ответов на них и возможность самостоятельно записать ответ на видео и посмотреть как ты выглядишь.
Из минусов: сертификат никак не купить. У меня не сработал ни один способ. Но тут уж сайт не виноват. 😔
www.educative.io
Grokking the Behavioral Interview - Free AI-Powered Course
The ultimate guide to behavioral interviews. Developed by FAANG engineers. Use real-world questions, video recording, and structured strategies to get interview-ready in just a few hours.
Немного про раскрашивание текста — https://zen.yandex.ru/media/android_junior/kak-raskrasit-tekst-v-prilojenii-629365697faaea548ef20cf0
Дзен | Статьи
Как раскрасить текст в приложении?
Статья автора «Блог Android-разработчицы» в Дзене ✍: Мы все знаем как сделать весь текст другого цвета. Но что делать, если приходит дизайнер и приносит макет, а там каждое слово разного цвета?
Немного про WorkManager — https://zen.yandex.ru/media/android_junior/workmanager-pliusy-i-minusy-chast-1-62a8b97d976862692ac3a316
Дзен | Статьи
WorkManager. Плюсы и минусы. Часть 1.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Довольно часто случается, что нам нужно сделать какую-то фоновую работу в приложении.
Когда я начала смотреть WorkManager, то думала, что там всё достаточно просто. Это же обычная фоновая работа и что там вообще изучать-то. Оказалось, что там очень много всего. И это я ещё не дошла до дебага и общение с воркером 🤔
Дзен | Статьи
WorkManager. Какие есть и как создать. Часть 2.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Про плюсы и минусы мы уже поговорили, так что теперь узнаем как создать WorkManager и какой выбрать.
👍4
Не прошло и полгода, как я смогла дописать еще одну часть! Теперь про дебаг :)
Дзен | Статьи
WorkManager. Как дебажить. Часть 3.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Есть несколько способов: — Самый простой способ, который, к сожалению, работает только для API 26+.
👍7❤1🔥1💯1
Вдохновлено вопросом "Аня, а зачем нам sealed-классы везде, если есть enum?" 😁
Дзен | Статьи
Sealed-классы, enum и sealed-интерфейсы. Чем отличаются?
Статья автора «Блог Android-разработчицы» в Дзене ✍: Все три варианта используются для группировки чего-то похожего. Но зачем вообще придумывали столько всего, если есть всем привычный Enum?
👍4🔥2
Столкнулась с интересным вопросом: почему у нас не запускается WorkManager сразу же и может ли быть так, что он вообще никогда не запустится? Оказалось, что может.
Дзен | Статьи
WorkManager. Всегда ли запустится сразу?
Статья автора «Блог Android-разработчицы» в Дзене ✍: Всю прошлую неделю у меня с коллегой был вялотекущий спор на одну тему. Представьте, что у нас есть WorkManager.
👍6
Отпуск закончился и у меня наконец-то есть силы что-то писать. Немного не про андроид, но тоже полезное :)
Дзен | Статьи
Управление командой. Заметки. Часть 1
Статья автора «Блог Android-разработчицы» в Дзене ✍: Сегодня немного не про андроид.
🔥2🥱2