Последние посты

Android Interview Review
15 сент. 2022 г., 14:00
Метод FragmentManager.commit() – синхронный или нет?– Асинхронный.Это значит, что транзакция не выполняется во время вызова метода. commit() добавляет транзакцию в очередь главного потока и транзакция выполняется при первой возможности.Чтобы выполнить транзакцию синхронно, можно воспользоваться методом commitNow() вместо commit() или вызвать executePendingTransactions() после метода commit().#Fragment20,000Открыть в Telegram
Android Interview Review
13 сент. 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,800Открыть в Telegram
Android Interview Review
7 сент. 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,100Открыть в Telegram
Android Interview Review
6 сент. 2022 г., 14:00
Расскажите про способы добавления и переключения фрагментов. Как работать с бэкстэком?Для управления фрагментами используются два класса: FragmentManager и FragmentTransaction.Для получения FragmentManager используются метод активити getSupportFragmentManager()) или метод фрагмента getChildFragmentManager()). FragmentManager начинает транзакцию и возвращает объект FragmentTransaction вызовом метода beginTransaction().Методы класса FragmentTransaction, которые необходимо знать - add(), remove() и replace().add() добавляет фрагмент на активити или другой фрагмент. Принимает аргументами containerViewId, в который добавляется фрагмент, инстанс фрагмента, тег. Другой способ добавить фрагмент - определить в лэйауте с помощью тега <fragment>.remove() - операция, обратная add(). Удаляет фрагмент.replace() удаляет все фрагменты, добавленные методом add() в заданный контейнер, и8,140Открыть в Telegram
Android Interview Review
2 сент. 2022 г., 14:02
FragmentFragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.Для создания и управления фрагментами используется FragmentManager.Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.#Fragment7,230Открыть в Telegram
Android Interview Review
1 сент. 2022 г., 07:02изменён
Нужно ли думать о сохранении состояния, если приложение поддерживает только портретную ориентацию?– Да.Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы.Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити.#State7,050Открыть в Telegram
Android Interview Review
29 авг. 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,020Открыть в Telegram
Android Interview Review
26 авг. 2022 г., 14:06
Activity: Жизненный циклЖизненный цикл активити состоит из шести основных коллбэков, вызываемых системой. В порядке вызова: onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy().onCreate() вызывается когда активити создается. В onCreate() вы должны вызвать метод setContentView().onStart() вызывается когда активити отрисована и видима пользователю.onResume() вызывается перед тем как активити станет доступна для взаимодействия с пользователем.onPause() – метод симметричный onResume(). Пользователь больше не может взаимодействовать с активити, но активити частично видна пользователю. В этом состоянии UI активити может изменяться.onStop() – метод симметричный onStart(). Вызывается, когда активити больше не видна пользователю.onDestroy() – метод симметричный onCreate(). Вызывается перед тем, как активити будет уничтожена системой.Несколько примеров:1. Пользо6,550Открыть в Telegram
Android Interview Review
24 авг. 2022 г., 14:02
Activity: Что такое и как запустить?Activity – основной компонент в андроиде. Активити – это экран, то что видит и с чем взаимодействует пользователь. Может содержать несколько View и фрагментов. Так же как и другие базовые компоненты, может быть точкой входа в приложение.Активити с MAIN Intent Filter в манифесте запускается при старте приложения, когда пользователь кликает на иконку приложения.#Activity #Components5,960Открыть в Telegram
Android Interview Review
22 авг. 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,610Открыть в Telegram
Android Interview Review
19 авг. 2022 г., 14:02
Может ли приложение быть запущено в нескольких процессах?Короткий ответ – Да.Но для начала давайте разберемся чем процесс отличается от потока.Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.Поток – это сущность на уровне Runtime Environment.Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов <activity>, <service>, <receiver>, <provider> может иметь поле android:process="<name>" в андроид манифесте. Кастомное значение этого поля явно говорит системе в каком процессе будет работать компонент.Важно: При старте7,730Открыть в Telegram
Android Interview Review
17 авг. 2022 г., 14:01
Из каких базовых компонент состоит приложение?Базовые компоненты андроид приложения: Activity, Service, BroadcastReceiver, ContentProvider. Каждый из базовых компонент объявляется в андроид манифесте и может являться точкой входа в приложение.Activity представляет UI и функциональность, видимые пользователю.Service используется для исполнения долгих операций, которые не требуют взаимодействия с пользователем.BroadcastReceiver принимает и обрабатывает броадкаст ивенты, отправленные внутри приложения или из других приложений.ContentProvider используется для обмена данными с другими приложениями.Каждый из компонентов подробнее рассмотрим в будущем.#Components7,340Открыть в Telegram
Android Interview Review
9 дек. 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,200Открыть в Telegram
Android Interview Review
6 дек. 2020 г., 13:00
Назовите три основных применения интентов1. Запустить активити. Intent передается в метод startActivity() явно, либо разрешается с помощью механизма Intent Resolution.2. Запустить сервис. Можно запустить сервис для выполнения единичной операции, передав Intent в startService().3. Доставить броадкаст. Для отправки броадкаст-ивента в другие приложения интент передается в sendBroadcast(), sendOrderedBroadcast(), или sendStickyBroadcast().#Intent18,700Открыть в Telegram
Android Interview Review
3 дек. 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,200Открыть в Telegram
Android Interview Review
1 дек. 2020 г., 15:00
Перечислите доступные хранилища данных• Shared Preferences – приватные примитивные данные в виде ключ-значение.• SQLite – структурированные данные в приватной базе данных.• Внешнее хранилище – общедоступное файловое хранилище: мультимедиа, документы, и прочее.• Внутреннее хранилище – файловое хранилище, доступное только для приложения.• Сетевое хранилище – любой сторонний сервис для хранения данных, доступный по сети.Помочь с выбором нужного хранилища поможет соответствующая страница документации.#Architecture11,100Открыть в Telegram
Android Interview Review
23 нояб. 2020 г., 09:01
Как передать параметры в конструктор фрагмента?Параметры передаются в конструктор Fragment-а через Bundle, с помощью метода Fragment.setArgument(Bundle). Переданный бандл может быть получен через Fragment.getArguments() в соответствующем методе жизненного цикла фрагмента.Распространенная ошибка передавать данные через кастомный конструктор. Использовать не-дефолтные конструкторы фрагментов не рекомендуется, потому что фрагмент может быть уничтожен и пересоздан вследствие изменений конфигурации (например при повороте экрана).Использование пары методов setArguments/getArguments гарантирует, что при пересоздании Bundle будет сериализован/десериализован, и данные восстановятся.#Fragment10,900Открыть в Telegram
Android Interview Review
18 нояб. 2020 г., 15:01
Какие классы служат для доступа к сенсорам?Таких классов четыре:• SensorManager – точка входа для работы с сенсорами и listener-ами их событий. Системный сервис, получаемый по имени Context.SENSOR_SERVICE;• Sensor – представляет отдельно взятый сенсор. Дает различную метаинформацию (энергопотребление, точность, производителя, и т.д.);• SensorEventListener – интерфейс для реализации обработчиков событий, приходящих из сенсоров. В нём реализуется логика обработки входящих данных;• SensorEvent – отдельное событие из сенсора: данные и точность их измерения.Для подробного изучения возможностей сенсоров на официальном сайте есть полный гайд.#Hardware10,200Открыть в Telegram
Android Interview Review
16 нояб. 2020 г., 15:00
Как отладить приложение на девайсе?Для удаленной отладки используется технология Android Debug Bridge. Она включает три компонента:• adbd – демон на стороне девайса, который принимает и выполняет команды.• ADB Сервер – демон на стороне компьютера, с которого ведется отладка. Принимает запросы от отладочных клиентов на TCP порт 5037. Служит единой точкой доступа к удаленной отладке. Запускается при первом старте adb клиента.• Клиенты – различные приложения, которые пользуются инструментами отладки. Самое простое – консольный клиент adb из SDK. Более сложные клиенты могут использовать adb внутри, либо самостоятельно подключаться к порту ADB сервера.Сервер передает команды от клиентов в adbd на эмуляторах через TCP порты, либо в adbd на реальных девайсах через USB или WiFi.Помимо самого дебаггера для отладки применяются дополнительные инструменты, такие как Android profiler и9,670Открыть в TelegramChannel created
2 мар. 2019 г., 05:47
