cookie

We use cookies to improve your browsing experience. By clicking «Accept all», you agree to the use of cookies.

avatar

Android Interview Review

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

Show more
Advertising posts
4 448
Subscribers
No data24 hours
No data7 days
No data30 days

Data loading in progress...

Subscriber growth rate

Data loading in progress...

Метод FragmentManager.commit() – синхронный или нет? – Асинхронный. Это значит, что транзакция не выполняется во время вызова метода. commit() добавляет транзакцию в очередь главного потока и транзакция выполняется при первой возможности. Чтобы выполнить транзакцию синхронно, можно воспользоваться методом commitNow() вместо commit() или вызвать executePendingTransactions() после метода commit(). #Fragment
Show all...
Photo unavailableShow in Telegram
❇️ Создайте свое первое приложение на Android. На открытом уроке для новичков «Реализация кроссплатформенного приложения на KMP». 👉 https://otus.pw/loKb/ Почему стоит посетить вебинар? - Напишем приложение с одним экраном, где есть общая часть, написанная в Kotlin-Muliplatform и использующуюся в нативных платформа. - Посмотрим, как создавать проекты для этой платформы, как они устроены. - Узнаем, как они интегрируются в iOS/Android проект. Вебинар пройдет в рамках специализации «Android Developer» — онлайн-курса для тех, кто хочет освоить эту профессию с нуля. 👉 Чтобы участвовать, зарегистрируйтесь
Show all...
Чем отличается tag в методах add() и addToBackStack()? Tag в методе add() присваивается фрагменту. Fragment.getTag() возвращает этот тег. Тег фрагмента используется в методе findFragmentByTag(). Tag в методе addToBackStack() это на самом деле не tag, а name. Имя транзакции, которое присваивается объекту BackStackEntry и возвращается методом getName(). Этот вопрос возник на собеседованиях, потому что когда только появились фрагменты было популярно писать такой код: val tag = "home_fragment" supportFragmentManager.beginTransaction() .add(R.id.fragmentContainer, HomeFragment, tag) .addToBackStack(tag) .commit(); … val lastEntryIndex = supportFragmentManager.backStackEntryCount - 1 val tag = supportFragmentManager.getBackStackEntryAt(lastEntryIndex).name val topFragment = supportFragmentManager.findFragmentByTag(tag) Сначала добавляется фрагмент с одинаковым тегом фрагмента и именем транзакции. Потом, используя имя-тег, можно получить инстанс фрагмента по позиции в бэкстэке. Удобно? Нет! Не надо так делать. #Fragment
Show all...
Photo unavailableShow in Telegram
Основы Java за 14 дней вместе с наставником – практикующим разработчиком. 10 учебных модулей, 62 урока с практикой в браузере, вебинары и лайвкодинг-сессия. Не важно, сколько вам лет, какое у вас образование и кем вы работаете сейчас. Начинаем 20 сентября. Занимайте место в группе!
Show all...
Важен ли порядок, в котором добавляются операции в FragmentTransaction? Документация описывает два случая, в которых порядок важен: 1. Метод commit() должен вызываться последним. 2. Если несколько фрагментов добавляются в один контейнер, то порядок добавления определяет порядок в котором фрагменты отрисовываются в иерархии view. Есть еще третий случай. Если метод addToBackStack(String name) вызывается несколько раз на одной транзакции, то транзакция добавляется в бэкстэк один раз с тегом, который передается в последнем вызове метода. Пример: supportFragmentManager.beginTransaction() .add(R.id.fragmentContainer, Fragment1()) .addToBackStack("add1") .add(R.id.fragmentContainer, Fragment2()) .addToBackStack("add2") .commit() Создается одна транзакция с тегом add2, которая добавляет сразу два фрагмента. При нажатии кнопки Back оба фрагмента будут удалены. Поведение нескольких addToBackStack() не задокументировано и может различаться на разных версиях ОС, так что не забудьте на собеседовании сказать, что вы бы так никогда делать не стали. #Fragment
Show all...
Расскажите про способы добавления и переключения фрагментов. Как работать с бэкстэком? Для управления фрагментами используются два класса: FragmentManager и FragmentTransaction. Для получения FragmentManager используются метод активити getSupportFragmentManager()) или метод фрагмента getChildFragmentManager()). FragmentManager начинает транзакцию и возвращает объект FragmentTransaction вызовом метода beginTransaction(). Методы класса FragmentTransaction, которые необходимо знать - add(), remove() и replace(). add() добавляет фрагмент на активити или другой фрагмент. Принимает аргументами containerViewId, в который добавляется фрагмент, инстанс фрагмента, тег. Другой способ добавить фрагмент - определить в лэйауте с помощью тега <fragment>. remove() - операция, обратная add(). Удаляет фрагмент. replace() удаляет все фрагменты, добавленные методом add() в заданный контейнер, и добавляет переданный аргументом фрагмент в контейнер. Параметр tag может быть null. Эти операции не выполняются сразу же после вызова методов. Метод commit() завершает транзакцию и выполняет операции транзакции. Метод addToBackStack() добавляет транзакцию в Back Stack. Это значит, что когда пользователь нажмет Back транзакция откатится. addToBackStack() применяется ко всем операциям в транзакции. Например следующий код добавляет транзакцию из трех операций в бэкстэк: fragmentTransaction .add(R.id.fragmentContainer1, fragment1) .add(R.id.fragmentContainer2, fragment2) .replace(R.id.fragmentContainer1, fragment3) .addToBackStack("tag") .commit() Метод popBackStack() удаляет транзакцию с верхушки бэкстэка, возвращает true, если бэкстэк хранил хотя бы одну транзакцию. Документация. #Fragment
Show all...
Fragment Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента. Для создания и управления фрагментами используется FragmentManager. Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента. Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library. #Fragment
Show all...
Нужно ли думать о сохранении состояния, если приложение поддерживает только портретную ориентацию? – Да. Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы. Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити. #State
Show all...
Photo unavailableShow in Telegram
Найти работу в айти можно 2 методами: Первый. Бесконечно скроллить HeadHunter и пытаться что-то выклевать на LinkedIn. Офигеть от условий и закрыть. Второй. Подписаться на Java Job. Это база адекватных предложений, где даже для новичков много мест с хорошей з/п. Тут найдете работу как в Яндексе (именно сюда крупняки присылают вакансии напрямую), так и в молодых стартапах! В общем, не теряйте времени и находите работу в 2 клика: @Job_javadevs
Show all...
Activity: Как пережить поворот экрана? При повороте экрана активити уничтожается и создается заново. Вызываются коллбэки onPause(), onStop(), onSaveInstanceState(), onDestroy()onCreate(), onStart(), onRestoreInstanceState(), onResume(). Чтобы сохранить состояние активити, вы должны переопределить метод onSaveInstanceState() и положить данные в Bundle. При реинициализации активити, Bundle с сохраненным состоянием передается в onCreate() и в onRestoreInstanceState(). Система вызывает onSaveInstanceState() и onRestoreInstanceState() только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки не вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish(). onSaveInstanceState() вызывается после onStop() на версии API ≥ 28. На API < 28 этот коллбэк вызывается перед onStop() и нет гарантий до или после onPause(). onRestoreInstanceState() вызывается после onStart(). #Activity #Lifecycle #State
Show all...