android

Системные контент-провайдеры в Android

Встроенных провайдеров довольно много, все их перечислять здесь будет проблематично. Но все встроенные провайдеры лежат в папке android.provider Android SDK, так что при желании можно будет все их посмотреть и изучить. Ну а к списку основных провайдеров относятся (здесь перечислены…

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

Для чего предназначен ContentProvider?

ContentProvider с английского переводится как “поставщик контента”. Это абстрактный класс и поэтому чтобы создать свой провайдер необходимо создать наследника этого класса. Бывают ситуации, когда одно приложение хочет использовать данные другого приложения. Но приложения не могут работать с чужими базами данных.…

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

Расскажите про утечку Activity / Context

Утечка активити/контекста в Android это утечка памяти, вызванная тем что активити/контекст уже уничтожены, но на них все еще есть внешние ссылки(например в статик переменной). В итоге сборщик мусора не может удалить эту активити/контекст, хотя он по сути уже бесполезен, тк…

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

Ограничения на BroadcastReceiver в Android 8.0

Начиная с версии Android 8.0 (API level 26) система начала накладывать дополнительные ограничения на ресиверы, объявленные статически через AndroidManifest.xml С этой версии Андроид больше не получится использовать статически объявленные ресиверы для получения неявных броадкастов (т.е броадкастов, которые предназначены не именно…

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

Расскажите про sticky broadcast

Sticky broadcast — это броадкаст, который сохраняется системой после отправки. Таким образом после того как вы отправили такой броадкаст, ресивер может его получить при регистрации, через возвращающее значение метода registerReceiver() (registerReceiver() возвращает Intent). В остальном это точно такой же броадкаст…

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

Способы отправки броадкастов в Android

Всего существует три способа отправить броадкаст. Использовать метод sendOrderedBroadcast(). При отправке броадкаста таким способом, он отправится последовательно по всем ресиверам, не больше чем к одному ресиверу одновременно. Причем каждый из ресиверов может либо распространить броадкаст дальше, либо не отправлять его…

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

Длительные операции в методе onReceive(). В чем их особенность?

Выполнять длительные операции в методе onReceive() не стоит. Дело в том, что если приложение не запущено, а ресивер принял какой-то броадкаст (это был статически зарегистрированный ресивер), то система запустит приложение (при этом не запустит активити, то есть приложение будет работать…

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

Основные методы жизненного цикла сервиса

Самыми важными методами жизненного цикла сервиса являются: 1. onStartCommand() Данный метод вызывается после того, как другой компонент (например активити) вызвал метод startService(). Когда данный метод был вызван, сервис запускается и живет до тех пор, пока в нем не будет вызван…

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

Назовите ограничения по фоновым сервисам в Android 8.0?

Для начала разберемся с разницей между foreground (не фоновое) и background (фоновое) приложениями. Приложение считается foreground если выполняется хотя бы один из этих пунктов: У приложения запущен foreground сервис У приложения видима какая-либо активити К приложению подключено другое foreground приложение…

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

Где и как работает Service?

Несмотря на то, что сервисы предназначены для выполнения фоновых операций, они не работают в фоновом потоке. Не стоит путать фоновую операцию с фоновым потоком. Сервисы предназначены для того, чтобы выполнять какую-либо операцию даже, когда приложение не запущено и пользователь с…

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

Какие бывают виды сервисов?

Всего есть три вида сервисов: Foreground Foreground Service это сервис о котором осведомлен пользователь. Такие сервисы высвечивают уведомление в шторке уведомлений, с помощью которого пользователь может взаимодействовать с ними. Пример: сервис, который проигрывает музыку. Background Такие сервисы не видны пользователю…

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

Для чего предназначен Service в Android?

Service (сервис) — это компонент приложения, который предназначен для выполнения длительных фоновых операций. При этом сервис не предоставляет UI. Как только сервис будет запущен он может оставаться активным даже после того, как пользователь покинет приложение, в котором данный сервис был…

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

Назовите отличия Dialog от DialogFragment

Раньше класс Dialog использовался для отображения всплывающих окон в Android. Сейчас же рекомендуется использовать DialogFragment как новый способ это делать, а класс Dialog сейчас использовать нежелательно (метод showDialog() deprecated). Дело в том, что у DialogFragment есть одно очень важное преимущество…

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

Синхронный ли метод FragmentTransaction.commit()?

Нет, данный метод асинхронный. Вызов commit() не произведет транзакцию сразу после вызова. Вместо этого, он добавит транзакцию в очередь главного потока, ждать своего выполнения, и исполнит транзакцию как только подойдет ее очередь. Если необходимо исполнить транзакцию сразу, то можно использовать…

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

Где используется Target Fragment?

TargetFragment используется примерно для того же что и startActivityForResult(), но между фрагментами. Таргет фрагмент это фрагмент который вызывает другой фрагмент чтобы получить из него какой-либо результат () Чтобы использовать его для того, чтобы получить результат выполнения какого-либо фрагмента необходимо проделать…

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

Что такое жизненный цикл фрагмента?

Фрагменты реализуют интерфейс LifecycleOwner и, соответственно, у них можно получить объект Lifecycle. У Lifecycle есть всего 5 состояний: INITIALIZED, CREATED, STARTED, RESUMED, DESTROYED. То есть сам жизненный цикл фрагмента по сути точно такой же как и у активити, так как…

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

Методы получения ссылки на Fragment из Activity

Есть два стандартных метода, которые вы можете вызвать на активити, чтобы найти в ней фрагмент. Это findFragmentByTag(String) и findFragmentById(Int). Данные методы позволяют найти фрагмент из активити. Первый метод находит фрагмент по тегу, который был использован при добавлении фрагмента методами add()…

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

Запустится ли приложение в нескольких процессах?

По умолчанию одно приложения запускается в одном процессе, но можно его запустить и в разных. Пока запущено андроид устройство, пользователь может покинуть приложение (например, чтобы ответить на входящий звонок), на какое-то время и тогда система может убить процесс, в котором…

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

Как можно добавлять и переключать фрагменты? Как работать с бэкстэком?

Если не говорить про NavigationComponent из Jetpack, то для добавления, переключения и удаления фрагментов используются два класса, FragmentManager и FragmentTransaction, но на самом деле почти все происходит в FragmentTransaction, менеджер нужен только чтобы получить транзакцию. Получить транзакцию можно методом менеджера…

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

Расскажите про реализацию метода View.onMeasure()

onMeasure() — метод, необходимый, чтобы определить размеры View и его “детей”. Данный метод должен быть переопределен таким образом, чтобы быстро и точно возвращать размеры View и его “детей”. Так же есть установки на View от его родителей, который накладывают дополнительные…

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