Latest posts

Android Interview Review
15 Sept 2022, 14:00
Метод FragmentManager.commit() – синхронный или нет?– Асинхронный.Это значит, что транзакция не выполняется во время вызова метода. commit() добавляет транзакцию в очередь главного потока и транзакция выполняется при первой возможности.Чтобы выполнить транзакцию синхронно, можно воспользоваться методом commitNow() вместо commit() или вызвать executePendingTransactions() после метода commit().#Fragment20,000Open in Telegram
Android Interview Review
13 Sept 2022, 14:00
Чем отличается 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)17,800Open in Telegram
Android Interview Review
7 Sept 2022, 14:00
Важен ли порядок, в котором добавляются операции в 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 оба фрагмента будут удалены.12,100Open in Telegram
Android Interview Review
6 Sept 2022, 14:00
Расскажите про способы добавления и переключения фрагментов. Как работать с бэкстэком?Для управления фрагментами используются два класса: FragmentManager и FragmentTransaction.Для получения FragmentManager используются метод активити getSupportFragmentManager()) или метод фрагмента getChildFragmentManager()). FragmentManager начинает транзакцию и возвращает объект FragmentTransaction вызовом метода beginTransaction().Методы класса FragmentTransaction, которые необходимо знать - add(), remove() и replace().add() добавляет фрагмент на активити или другой фрагмент. Принимает аргументами containerViewId, в который добавляется фрагмент, инстанс фрагмента, тег. Другой способ добавить фрагмент - определить в лэйауте с помощью тега <fragment>.remove() - операция, обратная add(). Удаляет фрагмент.replace() удаляет все фрагменты, добавленные методом add() в заданный контейнер, и8,140Open in Telegram
Android Interview Review
2 Sept 2022, 14:02
FragmentFragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.Для создания и управления фрагментами используется FragmentManager.Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.#Fragment7,230Open in Telegram
Android Interview Review
1 Sept 2022, 07:02edited
Нужно ли думать о сохранении состояния, если приложение поддерживает только портретную ориентацию?– Да.Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы.Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити.#State7,050Open in Telegram
Android Interview Review
29 Aug 2022, 14:02
Activity: Как пережить поворот экрана?При повороте экрана активити уничтожается и создается заново. Вызываются коллбэки onPause(), onStop(), onSaveInstanceState(), onDestroy() – onCreate(), onStart(), onRestoreInstanceState(), onResume().Чтобы сохранить состояние активити, вы должны переопределить метод onSaveInstanceState() и положить данные в Bundle.При реинициализации активити, Bundle с сохраненным состоянием передается в onCreate() и в onRestoreInstanceState().Система вызывает onSaveInstanceState() и onRestoreInstanceState() только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки не вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish().onSaveInstanceState() вызывается после onStop() на версии API ≥ 28. На API < 28 этот7,020Open in Telegram
Android Interview Review
26 Aug 2022, 14:06
Activity: Жизненный циклЖизненный цикл активити состоит из шести основных коллбэков, вызываемых системой. В порядке вызова: onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy().onCreate() вызывается когда активити создается. В onCreate() вы должны вызвать метод setContentView().onStart() вызывается когда активити отрисована и видима пользователю.onResume() вызывается перед тем как активити станет доступна для взаимодействия с пользователем.onPause() – метод симметричный onResume(). Пользователь больше не может взаимодействовать с активити, но активити частично видна пользователю. В этом состоянии UI активити может изменяться.onStop() – метод симметричный onStart(). Вызывается, когда активити больше не видна пользователю.onDestroy() – метод симметричный onCreate(). Вызывается перед тем, как активити будет уничтожена системой.Несколько примеров:1. Пользо6,550Open in Telegram
Android Interview Review
24 Aug 2022, 14:02
Activity: Что такое и как запустить?Activity – основной компонент в андроиде. Активити – это экран, то что видит и с чем взаимодействует пользователь. Может содержать несколько View и фрагментов. Так же как и другие базовые компоненты, может быть точкой входа в приложение.Активити с MAIN Intent Filter в манифесте запускается при старте приложения, когда пользователь кликает на иконку приложения.#Activity #Components5,960Open in Telegram
Android Interview Review
22 Aug 2022, 14:01
Приоритеты процессовПроцессы делятся по приоритету на 4 вида, в порядке убывания:1. Видимый активный процесс (Foreground process). В этом процессе работает приложение, с которым взаимодействует пользователь. Процесс находится в этом состоянии в следующих случаях: - Activity, у которой вызван onResume(), но еще не вызван onPause() - Во время выполнения BroadcastReceiver.onReceive() - Запущен Service и выполняется один из колбэков: onCreate(), onStart(), onDestroy()2. Видимый процесс. Пользователь знает о приложении, запущенном в этом процессе, но не взаимодействует с ним: - Activity у которой вызван onPause(), но еще не вызван onStop(). - Service, который запущен через Service.startForeground(). В этом случае пользователь видит нотификацию, связанную с сервисом. - Service, выполняющий функцию, о которой пользователь осведомлен. Например input method service.3. Background Service.6,610Open in Telegram
Android Interview Review
19 Aug 2022, 14:02
Может ли приложение быть запущено в нескольких процессах?Короткий ответ – Да.Но для начала давайте разберемся чем процесс отличается от потока.Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.Поток – это сущность на уровне Runtime Environment.Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов <activity>, <service>, <receiver>, <provider> может иметь поле android:process="<name>" в андроид манифесте. Кастомное значение этого поля явно говорит системе в каком процессе будет работать компонент.Важно: При старте7,730Open in Telegram
Android Interview Review
17 Aug 2022, 14:01
Из каких базовых компонент состоит приложение?Базовые компоненты андроид приложения: Activity, Service, BroadcastReceiver, ContentProvider. Каждый из базовых компонент объявляется в андроид манифесте и может являться точкой входа в приложение.Activity представляет UI и функциональность, видимые пользователю.Service используется для исполнения долгих операций, которые не требуют взаимодействия с пользователем.BroadcastReceiver принимает и обрабатывает броадкаст ивенты, отправленные внутри приложения или из других приложений.ContentProvider используется для обмена данными с другими приложениями.Каждый из компонентов подробнее рассмотрим в будущем.#Components7,340Open in Telegram
Android Interview Review
9 Dec 2020, 09:30
Назовите два способа очистить back stack при создании ActivityФлаг интента FLAG_ACTIVITY_CLEAR_TASK используется для того, чтобы очистить все активити таска. Activity, запущенная таким интентом становится новым корнем пустого бэкстека. Этот флаг обязан быть использованным вместе с FLAG_ACTIVITY_NEW_TASK.Другой вариант – FLAG_ACTIVITY_CLEAR_TOP. Разница в том, что если этот флаг задан, а в таск листе существует старый экземпляр данной активити, все другие активити будут удалены, а корнем станет тот старый экземпляр. Использовать при этом FLAG_ACTIVITY_NEW_TASK не обязательно, но рекомендуется.#Intent #Activity23,200Open in Telegram
Android Interview Review
6 Dec 2020, 13:00
Назовите три основных применения интентов1. Запустить активити. Intent передается в метод startActivity() явно, либо разрешается с помощью механизма Intent Resolution.2. Запустить сервис. Можно запустить сервис для выполнения единичной операции, передав Intent в startService().3. Доставить броадкаст. Для отправки броадкаст-ивента в другие приложения интент передается в sendBroadcast(), sendOrderedBroadcast(), или sendStickyBroadcast().#Intent18,700Open in Telegram
Android Interview Review
3 Dec 2020, 15:30
Какова структура Android-проекта?В проекте обычно присутствуют следующие файлы и директории:• AndroidManifest.xml – определение компонентов и требуемых возможностей девайса для приложения. • build.gradle – файлы конфигурации сборки для всего приложения и отдельных модулей. • src – исходный код классов и ресурсы проекта. • Файл .R – сгенерированный на этапе компиляции перечень всех ресурсов проекта. • assets – файлы, которые должны попасть в .apk как есть, без изменений.• res/drawable – директория для картинок (drawable-объектов). • res/layout – директория для файлов которые определяют UI приложения. • res/values – директория для различных XML-файлов с простыми ресурсами, такими как строки, цвета и числа. • res/mipmap – иконки для launcher-а разных разрешений. • res/menu – XML с определениями разных меню. • res/font – шрифты. • res/xml – XML файлы, доступные через15,200Open in Telegram
Android Interview Review
1 Dec 2020, 15:00
Перечислите доступные хранилища данных• Shared Preferences – приватные примитивные данные в виде ключ-значение.• SQLite – структурированные данные в приватной базе данных.• Внешнее хранилище – общедоступное файловое хранилище: мультимедиа, документы, и прочее.• Внутреннее хранилище – файловое хранилище, доступное только для приложения.• Сетевое хранилище – любой сторонний сервис для хранения данных, доступный по сети.Помочь с выбором нужного хранилища поможет соответствующая страница документации.#Architecture11,100Open in Telegram
Android Interview Review
23 Nov 2020, 09:01
Как передать параметры в конструктор фрагмента?Параметры передаются в конструктор Fragment-а через Bundle, с помощью метода Fragment.setArgument(Bundle). Переданный бандл может быть получен через Fragment.getArguments() в соответствующем методе жизненного цикла фрагмента.Распространенная ошибка передавать данные через кастомный конструктор. Использовать не-дефолтные конструкторы фрагментов не рекомендуется, потому что фрагмент может быть уничтожен и пересоздан вследствие изменений конфигурации (например при повороте экрана).Использование пары методов setArguments/getArguments гарантирует, что при пересоздании Bundle будет сериализован/десериализован, и данные восстановятся.#Fragment10,900Open in Telegram
Android Interview Review
18 Nov 2020, 15:01
Какие классы служат для доступа к сенсорам?Таких классов четыре:• SensorManager – точка входа для работы с сенсорами и listener-ами их событий. Системный сервис, получаемый по имени Context.SENSOR_SERVICE;• Sensor – представляет отдельно взятый сенсор. Дает различную метаинформацию (энергопотребление, точность, производителя, и т.д.);• SensorEventListener – интерфейс для реализации обработчиков событий, приходящих из сенсоров. В нём реализуется логика обработки входящих данных;• SensorEvent – отдельное событие из сенсора: данные и точность их измерения.Для подробного изучения возможностей сенсоров на официальном сайте есть полный гайд.#Hardware10,200Open in Telegram
Android Interview Review
16 Nov 2020, 15:00
Как отладить приложение на девайсе?Для удаленной отладки используется технология Android Debug Bridge. Она включает три компонента:• adbd – демон на стороне девайса, который принимает и выполняет команды.• ADB Сервер – демон на стороне компьютера, с которого ведется отладка. Принимает запросы от отладочных клиентов на TCP порт 5037. Служит единой точкой доступа к удаленной отладке. Запускается при первом старте adb клиента.• Клиенты – различные приложения, которые пользуются инструментами отладки. Самое простое – консольный клиент adb из SDK. Более сложные клиенты могут использовать adb внутри, либо самостоятельно подключаться к порту ADB сервера.Сервер передает команды от клиентов в adbd на эмуляторах через TCP порты, либо в adbd на реальных девайсах через USB или WiFi.Помимо самого дебаггера для отладки применяются дополнительные инструменты, такие как Android profiler и9,670Open in TelegramChannel created
2 Mar 2019, 05:47
Related Channels
Other channels in the same section of the catalogue.
