android

Какие есть недостатки паттерна MVP

Вот несколько минусов MVP в Android-разработке Круговая зависимость View и Presenter. У View есть ссылка на Presenter, а у Presenter есть ссылка на View. Обычно это не так плохо, но стоит вспомнить, что в Андроид View — это как правило…

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

Паттерн MVP

MVP (Model-View-Presenter) — как и MVC, является шаблоном проектирования архитектуры приложения. Данный паттерн произошел от MVC и многое унаследовал от него. Но есть и отличия. Слои Model и View по своей сути такие же как и в MVC, но вот…

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

Паттерн MVC

MVC (Model-View-Controller) — шаблон проектирования архитектуры приложений. Он используется чтобы разделить логику всего приложения на три элемента, связанных друг с другом. Это позволяет разделить представление информации “внутри” приложения и то, как эту информация видит и вводит пользователь. Благодаря этому упрощается…

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

Расскажите про Android Jetpack

Android Jetpack это набор библиотек от Google, призванный улучшить разработку под Андроид. Он помогает разработчикам приложений следовать хорошим шаблонам проектирования, уменьшает бойлерплейт код и также позволяет писать код, который будет стабильно работать на всех версиях андроид и на всех андроид…

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

Расскажите про Consumer ProGuard

ProGuard это утилита, которая позволяет оптимизировать, уменьшить и запутать (то есть сделать байткод более запутанным, чтобы люди которые будут его расшифровывать не смогли понять зачем он нужен) код Java. В Android разработке данная утилита часто используется при сборке build type…

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

Назовите отличия invalidate() от requestLayout()

requestLayout() и invalidate() — два метода, которые используются чтобы обновить View после его изменения. Но используются они для разных вещей. invalidate() это метод, который при вызове гарантирует что в когда-то в будущем (довольно скоро после вызова invalidate(), но не сразу)…

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

Расскажите про SparseArray

SparseArray сопоставляет целые числа с объектами, и, в отличие от обычного массива объектов, его индексы могут содержать пробелы. По сути это мапа, где ключами являются целые числа. SparseArray предназначен для более эффективного использования памяти, чем HashMap SparseArray сохраняет свои пары…

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

Отличия Schedulers⁠ от Schedulers⁠.computation() в RxJava?

Schedulers.computation( ) — это scheduler, предназначенный для выполнения вычислительной работы. Он основан на ограниченном числе потоков, по умолчанию равном количеству потоков процессора вашего компьютера. Каждая задача, которая поступает на этот scheduler помещается в очередь задач, каждый новый освободившийся поток берет…

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

Расскажите про Handler

Handler с английского переводится как “обработчик”. Этот класс используется вместе с MessageQueue и Looper. Handler используется для работы с MessageQueue, потому что давать программистам доступ к самой очереди сообщений было бы небезопасно. Так что как связующее звено между программистом и…

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

Расскажите про Looper

В обычных программах вызывается метод main() и исполнение программы завершается сразу после того как исполнится метод main(). Но в Андроид приложения зачастую вынуждены ожидать действий пользователя и только потом выполнять какое-либо действие. Для этого в Андроид используются три класса: Looper,…

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

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

Метод onDraw() отвечает за саму отрисовку View на экране пользователя. На вход она получает объект Canvas — холст. На канвасе можно рисовать все что угодно: 2D графику, текст, обычный и стилизованный, геометрические фигуры и много чего еще. Для рисования на…

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

Чем отличаются apply() и commit() в SharedPreferences?

Схема изменения данных, сохраненных в SharedPreferences выглядит как-то так: Так же есть вот такой вариант, покороче: В первом случае был использован apply(), во втором же commit() Разница между этими двумя методами состоит в том, что commit() выполняется в главном потоке…

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

Чем отличаются Preference и SharedPreferences?

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

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

В чем разница между build type, flavor и build variant?

Build Type — тип сборки. Он используется чтобы задать настройки сборки. По умолчанию Android Studio создает 2 типа сборки, debug и release, но в файле build.gradle прописан только один. Тип сборки debug включает в себя полезные инструменты для отладки, а…

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

Способы выполнения кода в UI потоке. Можно ли обновлять View не из UI потока?

Обращаться к каким-нибудь элементам View не из UI потока нельзя, поэтому UI поток так и назван, что только он может обновлять вьюхи. Если попытаться обновить вьюхи не из UI потока, то вылетит CalledFromWrongThreadException. Есть несколько способов исполнить кусок кода в…

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

Сколько main activity может содержать AndroidManifest?

Main activity — это активити, которая в своем интент фильтре объявила action main и category launcher, как здесь: Action main означает, что данная активити является точкой входа в приложение, точек входа может быть несколько и у нескольких активити action main…

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

Intent resolution неявных интентов.

Intent Resolution — механизм поиска нужного компонента для вызова по неявному интенту. Когда вы используете явный интент, вы четко прописываете какой именно компонент запустить, используя же неявный интент, вы не знаете какой именно компонент будет запущен, вы знаете только что…

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

Особенности отличия Bundle от Intent

Bundle с английского означает пакет Этот класс используется для передачи данных между базовыми компонентами, например между активити или между фрагментами. Так же он используется для сохранения состояния активити при изменениях конфигурации. В этом классе реализованы методы get() и put() для…

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

Расскажите про Cursor

Cursor — возвращаемый методом query() тип. Объект данного класса представляет собой табличку, состоящую из строк и столбцов, где столбцы представляют собой выбранные поля в записи бд, а строки это и есть сами записи. Таким образом, Cursor, который возвращается методом query(),…

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

Особенности работы с данными через ContentResolver

ContentResolver имеет методы, одноименные методам ContentProvider, и выполняющие CRUD функции (create, read, update, delete). Вот список данных методов: insert() — соответствует функции create. Создает новую запись в провайдере и возвращает URI данной записи. Данные для новой записи помещаются в объект…

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