Android – базирующаяся на ОС Linux операционная система с открытым исходным кодом, предназначенная для мобильных устройств – таких, как, например, смартфоны или планшетные компьютеры.
Это руководство предназначено для введения в основные понятия программирования под Android, так что после его изучения вы будете понимать некоторые базовые концепции программирования под эту ОС.
От вас же, в свою очередь, требуется только желание и базовое понимание программирования на языке Java. Не так много, правда? Что ж, начнём!
Среда разработки
Для разработки приложений под Android можно использовать любые из перечисленных операционных систем:
- Microsoft Windows XP или более поздняя версия
- Mac OS X 10.5.8 или более поздняя версия с чипом Intel
- Linux, включающая GNU C Library 2.7 или более позднюю версию
При этом все необходимые инструменты для разработки Android-приложений находятся в свободном доступе и вы можете загрузить их из Интернета. Для того, чтобы начать создавать приложения под Android, вам понадобятся:
- Java JDK5 или более поздняя версия
- Android Studio
Структура приложений
Поздравляем, ваше оборудование готово к работе! Однако прежде чем приступить к вашему первому приложению, поговорим о том, что из себя представляет приложение на Android и из чего оно состоит.
Компоненты приложения являются своего рода «строительными блоками» для приложения Android. Эти компоненты связаны файлом-манифестом приложения AndroidManifest.xml, который описывает каждый компонент приложения и взаимодействие этих компонентов между собой.
Есть четыре базовых типа компонентов, которые могут быть использованы в приложении Android:
- Операции (Activities) представляют собой элементы пользовательского интерфейса (одна операция – один экран) и отвечают за взаимодействие пользователя с экраном мобильного устройства;
- Службы (Services) представляют собой длительные операции, работающие в фоновом режиме и не имеющие пользовательского интерфейса (например, передача данных), вместо этого они, как правило, запускаются иными элементами, уже имеющими пользовательский интерфейс, и взаимодействуют с ними;
- Приемники широковещательных сообщений (Broadcast receivers) представляют собой компоненты, реагирующие на объявления самой ОС, передаваемые всей системе (как хороший пример – объявление о низком уровне заряда батареи устройства). Они также не имеют пользовательского интерфейса, однако могут передавать данные другим компонентам, где они демонстрируются пользователю в виде уведомлений;
- Поставщики контента (Content providers) представляют собой компоненты, управляющие взаимодействием приложения с его базой данных — посредством поставщика контента другие компоненты приложения могут запрашивать или изменять данные.
Помимо четырех базовых типов, существуют дополнительные типы компонентов, используемые для выстраивания взаимодействий и связей как между базовыми типами компонентов, так и между компонентами и внешними элементами. К ним относятся:
- Фрагменты (Fragments) – части пользовательского интерфейса в Операциях (см. выше);
- Виды (Views) – элементы пользовательского интерфейса, отображаемые на экране, например, кнопки, списки и т. д.;
- Макеты (Layouts) – определяют элементы пользовательского интерфейса, их свойства и расположение;
- Намерения (Intents) – соединяют вместе различные компоненты приложения или связывают друг с другом работу разных приложений;
- Ресурсы (Resources) – внешние элементы, такие, как строки, константы или изображения;
- Манифест (Manifest) – конфигурационный файл приложения.
Теперь, когда вы получили базовое понимание о структуре приложений на Android, хотелось бы предложить вам самим попробовать создать свое первое приложение.
Первое приложение
Итак, давайте приступим к созданию простого Android-приложения, которое будет выводить на экран «Hello World!».
У вас к этому времени уже должен быть установлен Android Studio последней версии. Ниже будет приведена небольшая пошаговая инструкция:
- Откройте Android Studio.
- В открывшемся окне кликните на «Start a new Android Studio project», чтобы создать новый проект.
- В открывшемся окне в строку «Application name» введите название вашего будущего приложения. Нажмите Next.
- В следующем окне вам нужно выбрать тип устройств, для которых создается приложение – в нашем случае необходимо выбрать «Phone and Tablet» (смартфоны и планшетные компьютеры), а в выпадающем списке под названием «Minimum SDK» нужно выбрать версию Android, для которой создается приложение (обычно указывается самая ранняя версия, способная запустить приложение) – в нашем конкретном случае выберем версию Android 6.0. Если в вашей версии есть возможность выбрать язык программирования (выпадающее окно Language), выберите пункт “Java”. Остальные опции можно оставить без изменений. Нажмите Next.
- На следующем этапе выберите пункт Empty Activity – это будет означать, что экран нашего приложения не будет иметь никаких дополнительных элементов. Нажмите Next.
Теперь перед вами открылась привычная среда разработки. К сожалению или к счастью, но сейчас вам не нужно будет писать код – среда разработки уже сделала это за вас, создав файлы для приложения, выводящего «Hello world!» на экран, по умолчанию. Вместо этого хотелось бы обратить ваше внимание на несколько созданных файлов и папок, найти которые вы можете в колонке слева, отображающей все элементы проекта.
- Файл MainActivity.java
В папке «Java» содержатся исходные файлы формата .java для вашего приложения. По умолчанию в ней находится исходный файл MainActivity.java, имеющий класс Операция – он запускается при нажатии пользователем на иконку приложения на устройстве. Этот файл содержит главный код приложения, и именно он преобразуется в файл .exe для запуска приложения на устройстве.
- Файл AndroidManifest.xml
Это файл типа «Манифест», который описывает основные характеристики приложения и определяет каждый из его компонентов. Он является своего рода интерфейсом между ОС Android и вашим приложением – если компонент не упомянут в этом файле, он не будет отображен и в операционной системе.
- Файл Build.gradle
Это автоматически генерируемый файл, содержащий определённые данные касательно приложения – такие, как, например, версия SDK.
Запустить приложение можно двумя способами: на реальном устройстве или на эмуляторе в самой среде разработки. В нашем случае мы рассмотрим более универсальный случай – запуск на эмуляторе, полностью имитирующем работу устройства с операционной системой Android.
Запуск приложения на эмуляторе
Попытайтесь запустить приложение кнопкой «Run» – в появившемся диалоговом окне выберите пункт «Create New Virtual Device». В последующих окнах нужно будет выбрать размер экрана и версию Android – помните, что она должна быть не ниже, чем указанная на этапе создания проекта. В случае, если данная версия Android будет отсутствовать на компьютере, Android Studio предложит ее загрузить. Остальные пункты можно оставить без изменений – на данный момент нет необходимости их изменять. После выбора всех настроек нажмите кнопку «Finish», и если вы увидели на своем мониторе экран телефона с названием вашего приложения сверху и с надписью «Hello world!» на экране, значит, вы можете себя поздравить – вы создали свое первое Android-приложение!
Теперь у вас есть базовое понимание и минимальный опыт в создании приложений на Android. Этого, разумеется, совершенно не хватит, чтобы заниматься разработкой, но это необходимый для дальнейшего развития фундамент – продолжайте изучать и практиковаться! Всего наилучшего!
Также можно научиться создавать приложения на Android и другие ОС после прохождения нашего шестимесячного курса «Профессия: Разработчик» 👉 Узнать подробности!
1. Требования к аппаратуре и программному обеспечению
Для устройств на базе ОС Android:
- Android — версия 2.3 и старше;
- оперативная память — не менее 256 Мб для работы приложения;
- на базе процессоров Intel x86 и ARM с архитектурой ARMv5TE и выше;
- сенсорный экран.
2. Установка, обновление, удаление мобильного приложения
Установка мобильного приложения выполняется из магазина приложений Google Play (https://play.google.com/store).
Обновление мобильного приложения выполняется средствами магазина приложений.
Для удаления мобильного приложения необходимо на мобильном устройстве запустить приложение Google Play и в нем удалить мобильное приложение.
3. Запуск мобильного приложения
Для запуска мобильного приложения необходимо найти нужное приложение в списке и нажать на его картинку. При этом в большинстве случаев будет открыто основное окно мобильного приложения. Однако если с данной программой связано несколько приложений, то будет открыт список этих приложений. В этом случае для запуска приложения следует нажать на нужное приложение в списке.
4. Работа со списком приложений
Для выполнения большинства нижеперечисленных действий необходимо попасть в список приложений. Это можно сделать из запущенного приложения с помощью главного меню, выбрав в нем пункт Список приложений. Также список приложений доступен сразу при запуске мобильного приложения, если зарегистрировано более одного приложения.
Для того чтобы изменить порядок приложений в списке, следует:
- нажать кнопку Упорядочить — в правой части каждой строки отобразится кнопка перетаскивания.
- нажать кнопку в строке приложения, которое нужно переместить и перетащить ее на требуемое место.
4.1. Создание приложения
Для того чтобы создать приложение для мобильной платформы, следует:
- Выбрать команду добавления приложения.
- Указать имя приложения и нажать кнопку Готово.
- После закрытия окна будет создано приложение.
4.2. Запуск приложения
При запуске мобильного приложения в большинстве случаев будет открыто основное окно приложения. Однако если с данной программой связано несколько приложений, то будет открыт их список. В этом случае для запуска приложения следует нажать на нужное приложение в списке.
4.3. Изменение свойств приложения
Свойства приложения изменяются в специальном окне. Для открытия окна свойств приложения следует выполнить длинное нажатие на нужном приложении. В открывшемся контекстном меню выбрать команду Изменить.
В открывшемся окне можно изменить наименование приложения, запустить его (кнопка Открыть) или удалить (кнопка Удалить).
После удаления приложения данные информационной базы восстановить невозможно.
4.4. Удаление приложения
Для удаления приложения следует выбрать команду Удалить и подтвердить свое действие: выполнить длинное нажатие на удаляемом приложении. В открывшемся контекстном меню выбрать команду Удалить.
После удаления приложения данные информационной базы восстановить невозможно.
4.5. Обновление приложения
Мобильное приложение обновляется с помощью используемого магазина приложений. После его успешного обновления мобильного приложения необходимо обновить ранее созданные приложения. Для этого достаточно запустить приложение.
Если в процессе выполнения обновления будет обнаружена необходимость реструктуризации базы данных, то будет запрошено подтверждение выполнения этой операции. В случае отказа обновление будет отложено до следующего запуска приложения.
Также имеет смысл отказаться от обновления, чтобы сделать резервную копию базы данных.
5. Интерфейс системы
Интерфейс мобильной платформы ориентирован на то, что в один момент времени на экране отображается одна форма. Под нее освобождается максимум свободного места на экране. Первой видимой формой обычно является рабочий стол. Команды, открывающие другие формы, собраны в главное меню приложения. Также это меню содержит команду возврата на рабочий стол, команды отображения информации о программе и перехода к списку приложений. Вызов главного меню приложения осуществляется с помощью системной кнопки вызова меню.
6. Работа с формами
Прокручиваться может как форма, так и элемент формы. При прокрутке таких форм существует следующая особенность:
- если прокрутка началась внутри элемента и ему есть куда прокручиваться в момент начала действия, то прокрутка будет осуществляться для элемента;
- в противном случае прокручиваться будет вся форма.
Полосы прокрутки на мобильных устройствах не отображаются постоянно, поэтому можно не обратить внимания на то, что форма (отчет или таблица) показывает только фрагмент информации.
Практически в каждой форме есть команды, выполняющие определенные действия в форме. Часто используемые команды представлены в виде кнопок или гиперссылок на самой форме. Редко используемые команды доступны через специальное меню Все действия, доступ к которому осуществляется с помощью кнопки ≡.
Команды открытия вспомогательных форм реализованы с помощью специального меню, которое открывается с помощью нажатия на заголовок окна, если заголовок выделен подчеркиванием.
В форме могут располагаться табличные документы и диаграммы. В этих объектах может быть доступна функция расшифровки. Расшифровка — это действие, связанное со значением в ячейке табличного документа или элемент диаграммы. Это может быть открытие другой формы, построение другого отчета или перестроение текущего и т. д. Для выполнения расшифровки нужно нажать на интересующую ячейку или элемент диаграммы. Если расшифровка не поддерживается, ничего не произойдет.
7. Ввод текста
Для ввода различной информации предназначена экранная клавиатура. Для ее активации, как правило, достаточно нажать на поле ввода, куда требуется ввести информацию. Кнопка Готово (Далее, Ввод и т. д.) приводит к переходу между полями ввода без закрытия клавиатуры.
8. Работа с файлами мультимедиа
В мобильном приложении может быть предусмотрена работа с мультимедийными возможностями устройства: создание аудиозаписи, использование встроенной камеры (для фото- и видеосъемки).
Запись аудио. Нажать кнопку диктофона в центре нижней части экрана. Чтобы остановить запись, повторно нажать кнопку диктофона. Чтобы отменить запись, нажать клавишу Назад.
Сохраненная аудиозапись будет обработана мобильным приложением.
Запись видео. Нажать кнопку записи видео в центре нижней части экрана. Чтобы остановить запись, повторно нажать кнопку записи. Чтобы отменить запись, нажать клавишу Назад.
Сохраненная видеозапись будет обработана мобильным приложением.
Съемка фотографии. Нажать кнопку фотокамеры. Для отмены съемки нажать клавишу Назад.
Сохраненный фотоснимок будет обработан мобильным приложением.
9. Местоположение на карте
В мобильном приложении может быть предусмотрена возможность работы с картографическим сервисом Google Maps (отображение адреса). В настройках телефона должна быть включена служба геопозиционирования.
Установка Google Maps в виде отдельного приложения не требуется.
10. Сообщения пользователю
Сообщения пользователю отображаются в специальной панели. Эта панель отображается на экране только в тот момент, когда в ней есть сообщения. Если панель закрывается, то список сообщений очищается. Нажатие на сообщение приводит к активации элемента формы, если сообщение связано с таковым. Для повторного открытия списка сообщений следует повторно вызвать действие, приводящее к открытию списка.
11. Резервное копирование
Резервное копирование данных выполняется в зависимости от используемого мобильного приложения.
Если используется мобильное приложение, не связанное с удаленной системой, то для резервного копирования можно воспользоваться штатными средствами используемой операционной системы мобильного устройства.
Если используемое приложение выполняет синхронизацию данных с удаленной системой, то рекомендуется выполнить сеанс синхронизации данных. Необходимость использования штатных средств резервного копирования после выполнения синхронизации зависит от наличия в мобильном приложении данных, которые не синхронизируются с удаленной системой. Если таких данных нет, то в случае возникновения проблем приложение можно пересоздать и провести начальную инициализацию данных из удаленной системы.
На устройствах под управлением iOS при создании приложения папка с данными приложения помечается как нерезервируемая. После того как изменяются данные приложения (в процессе работы с приложением), папка с данными приложения помечается как резервируемая и начинается ее резервное копирование с помощью системных средств.
Альтернативы NodoFlix: лучшие страницы для просмотра сериалов
NodeFlix не работает? Не волнуйтесь, есть и другие варианты бесплатного просмотра качественных сериалов и фильмов онлайн. Откройте для себя альтернативы.
Мы представляем лучшие логические головоломки для Android, включая различные виды, которые представляют собой головоломки и многое другое.
Сайты для безопасной и быстрой загрузки APK на Android
Откройте для себя лучшие веб-сайты и приложения для безопасной и быстрой загрузки APK-файлов на Android. Доступ ко всем видам приложений.
Как сканировать документы с помощью Google Диска и сохранять их в формате PDF
Узнайте, как сканировать документы с помощью Google Диска и сохранять их в формате PDF на свой диск. Узнайте, что это такое, как работает, какие у него преимущества.
RBTV77: Как получить бесплатный APK на испанском языке и смотреть спортивные состязания
Узнайте, как загрузить и использовать RBTV77, приложение, которое позволяет вам бесплатно смотреть спортивные трансляции в формате HD с вашего устройства Android.
Lumosity: все, что нужно знать о самой популярной «тренировке мозга»
Хотите узнать, из чего состоит Lumosity, какие результаты он предлагает и какие альтернативы более интересны? Ну продолжайте читать.
Лучшие приложения для совместного использования автомобилей
Ищете приложения для совместного использования автомобилей? Здесь мы расскажем вам, какие из существующих самые безопасные и надежные.
Лучшие приложения для перевода кошачьего мяуканья
Есть ли приложения для перевода кошачьего мяуканья? Как бы любопытно это ни звучало, но да, они есть, и в этой статье мы поговорим о них.
Лучшие приложения для серфинга для вашего мобильного Android
Если вы увлечены спортом или если он привлекает ваше внимание, откройте для себя лучшие из существующих приложений для серфинга.
5 лучших музыкальных виджетов для Android, которые стоит попробовать в этом году
Сегодня мы покажем вам 5 лучших музыкальных виджетов для Android, которые существуют, чтобы вы могли закрепить их на главном экране своего мобильного телефона.
Как записать звонок на телефоне самсунг
Есть несколько вариантов записи разговора на телефоне Samsung. Здесь мы расскажем вам о самых практичных, со сторонними приложениями и без них.
Лучшие приложения для чтения комиксов бесплатно
Вы ищете приложения, чтобы читать комиксы бесплатно? Здесь мы оставляем вам некоторые из лучших предложений, которые существуют для вашего устройства Android.
5 лучших приложений, которые помогут избежать пищевых отходов
Список лучших приложений, чтобы не тратить еду впустую, все они доступны на Android.
Как установить Android Auto
У вас есть вопросы о том, как установить Android Auto или как максимально использовать возможности этого приложения? Что ж, продолжайте читать.
Какой лучший бесплатный мобильный очиститель?
Хотите знать, какой лучший бесплатный мобильный очиститель? Здесь мы оставляем вам наши лучшие рекомендации и их характеристики.
ChatGPT: официальное приложение для общения с ИИ теперь с вашего мобильного телефона
Откройте для себя приложение для Android, которое связывает вас с шедевром OpenAI. Нажмите и получите эту универсальную версию ИИ!
Лучшие приложения для нумизматов в 2023 году
Вы увлечены нумизматикой и хотите контролировать свою коллекцию? Откройте для себя лучшие приложения для коллекционеров монет.
Почему Nodogo не работает и каковы лучшие альтернативы
Вы пробовали бесплатно смотреть спортивные передачи с Nodogo и обнаружили, что это не работает? Объясняем причины и подсказываем другие варианты.
Приложения для бесплатного просмотра ТВ с более чем 1000 каналов у вас под рукой
Подборка, где вы найдете лучшие приложения для просмотра ТВ бесплатно и онлайн. Кроме того, они полностью легальны.
Как скачать Master Royale Infinity, сервер Clash Royale
Хотите наслаждаться Clash Royale без разочарований и ограничений? Мы научим вас, как скачать Master Royale Infinity, частный сервер.
Лучшие приложения для аренды электросамокатов: руководство и советы
Хотите арендовать электрический скейтборд для передвижения по городу? Мы покажем вам лучшие приложения для этого и несколько советов.
Как изменить логотип Twitter на X, новый значок приложения
Вы хотите изменить логотип Twitter на X, новый значок социальной сети? Рассказываем, как с помощью приложения и другими способами, не пропустите!
SkyShowtime: стриминговая платформа и ее полный каталог
Узнайте все о SkyShowtime, новой потоковой платформе, которая приходит в Испанию с сериалами и фильмами от Paramount, Universal и других.
Как удалить контакт из WhatsApp
В этом новом кратком руководстве по WhatsApp мы рассмотрим, как легко и просто удалить контакт всего за несколько шагов.
Все об Instander: неофициальном приложении Instagram
Разве вы не слышали об Instander, неофициальном приложении Instagram? В этой статье мы расскажем вам, что вам нужно знать.
Лучшие приложения для оплаты с помощью мобильного телефона
Узнайте, какие приложения лучше всего подходят для оплаты с помощью мобильного телефона, чем отличается каждое из них, его преимущества и недостатки.
Лучшие остроумные приложения с добрым утром
Начинайте каждый день с улучшения своего настроения и настроения других с помощью лучших остроумных фраз с добрым утром.
Лучшие истинные или ложные приложения для Android
Если вы ищете забавные предложения, чтобы развлечь себя, здесь мы оставляем вам правдивые и ложные приложения для проверки ваших знаний.
Как удалить водяные знаки с видео бесплатно?
Многие мультимедийные материалы обычно помечены, поэтому полезно знать, как удалить водяные знаки с видео бесплатно.
Лучшие бесплатные приложения для редактирования фотографий в 2023 году
Узнайте, как бесплатно редактировать фотографии на своем мобильном телефоне с помощью лучших приложений 2023 года. Таким образом, вы можете улучшить качество и креативность своих изображений!
Как отправить красивое оригинальное сообщение спокойной ночи
Разве вы не можете всегда думать о том, как отправить красивые оригинальные сообщения спокойной ночи? Здесь мы оставляем вам очень полезную помощь.
5 лучших приложений искусственного интеллекта на мобильном устройстве Android
Сегодня мы рассмотрим 3 лучших приложения искусственного интеллекта на мобильном устройстве Android из множества существующих и доступных в 2023 году.
Winamp для Android: есть альтернативы, чтобы наслаждаться им
Один из легендарных самых успешных аудиоплееров последнего времени вернулся в мобильной версии: Winamp для Android.
6 лучших приложений и веб-сайтов для автонастройки онлайн
Сегодня мы познакомим вас с 6 лучшими на данный момент веб-сайтами и приложениями для выполнения автонастройки онлайн, чтобы вы могли улучшить свой голос и мелодии.
Основные отличия Bumble от Tinder и какой из них лучше для флирта
Узнайте о различиях между Bumble и Tinder, двумя самыми популярными приложениями для знакомства с новыми людьми. Кликай и знакомься с людьми!
3 лучшие альтернативы приложению Motodi для Android
Вам нравится контент, связанный с соревнованиями Формулы-1? Что ж, изучите 3 лучших альтернативы приложению Motodi для Android.
NodoGO APK: все об этом мобильном приложении для бесплатного просмотра футбола
Если вы никогда не использовали мобильное приложение NodoGO, вы все равно можете наслаждаться преимуществами бесплатного просмотра футбола онлайн через приложение Nodo Sports.
Темы: что это такое и как работает эта новая социальная сеть?
Рассказываем все о Threads, что это такое и как работает эта новая социальная сеть, запущенная совсем недавно.
Лучшие приложения для присмотра за домашними животными для Android
Хотите знать, какие приложения для няни являются лучшими? Что ж, в этой статье мы покажем вам разнообразную и полезную подборку.
Как узнать флаги мира с помощью мобильного телефона
Хотели бы вы узнать флаги мира весело и по-другому со своего мобильного телефона? Проверьте свои знания с помощью этих приложений.
Что такое Youtube Blue и Youtube Orange, отличия и какой выбрать
Узнайте, что такое синий YouTube и оранжевый YouTube — две разные версии одной и той же видеоплатформы. Войдите сейчас и выберите свой!
Лучшие приложения, чтобы узнать, когда закончится жара
Вы хотите знать, когда заканчивается период сильной жары, и иметь возможность предотвратить появление следующих в будущем? Здесь мы оставляем вам приложения, которые помогут вам.
Могу ли я активировать помощника Google, который находится на моем экране?
Вы когда-нибудь задумывались, могу ли я активировать и деактивировать помощника Google на моем экране? В этой статье мы объясним, как это сделать.
Новости для переводчика Google Lens, который улучшит ваш опыт
Google Lens еще никогда не был таким привлекательным в использовании. Знайте все новости о Google Lens, которые были объявлены.
Что такое невидимый режим в Telegram?
Учебник по активации невидимого режима в Telegram, приложение, которое у вас есть. Как официальным способом, так и через приложение.
Мой музыкальный гороскоп от Spotify: музыка по твоему знаку
Откройте для себя музыкальный гороскоп Spotify, способ слушать музыку, которая лучше всего подходит вам в соответствии с вашим знаком зодиака. Заходите и слушайте!
Как стать влиятельным лицом Sweatcoin
Хотите знать, как стать влиятельным лицом поткойна и как этого добиться? Здесь мы объясняем все просто.
Как отменить покупку на Wallapop
Вы не знаете, как отменить покупку на Wallapop? Что ж, обратите внимание на эту статью, чтобы узнать, как это сделать.
Лучшее время для публикации в TikTok
Рассказываем, в какое время лучше всего публиковать посты в TikTok, где у вас много расписаний и трюков.
AAAD не работает, что делать?
AAAD не работает, мы сообщим вам, как решить любую проблему, связанную с Android Auto.
Забавные состояния WhatsApp, которые стоит попробовать с друзьями
Откройте для себя лучшие забавные статусы WhatsApp, чтобы удивить и развлечь своих контактов. Заходи и смейся вместе с нами!
Это лучшие приложения для цифрового банкинга и какие из них выбрать
Вы хотите управлять своими финансами с мобильного телефона с комфортом, скоростью и безопасностью? Выберите тот, который подходит вам лучше всего. Заходите и сравните!
Что такое ватерпас в Google и как им пользоваться?
Google и Android предлагают нам широкий спектр веб-инструментов и мобильных приложений. Например, пузырьковый уровень в Google, который вы узнаете сегодня.
Имена для спотыкающихся парней: как выбрать лучшее и примеры
Мы покажем вам, как выбрать лучшее имя для Stumble Guys, революционной многопользовательской онлайн-игры, полной веселья и юмора.
3 крутых мобильных приложения для Android в качестве альтернативы Wordle
Многие уже знают и играли в Wordle на своих мобильных и компьютерах. Поэтому сегодня мы представим 3 Android-приложения/игры, альтернативные Wordle.
Как включить мобильный фонарик встряхиванием устройства
Хотите знать, как включить фонарик вашего устройства, просто встряхнув его? Здесь мы покажем вам, как и некоторые приложения для этого.
Как запросить возврат средств за приложение в Google Play
У вас есть приложение, которое вам больше не нужно? Были ли у вас несанкционированные покупки? Объясняем, как вернуть приложение и вернуть деньги
Лучшие бесплатные приложения для интервального голодания года
Если вы хотите похудеть с помощью диеты, известной как прерывистое голодание, в этой публикации вы узнаете о 5 лучших приложениях для этого.
Лучшие приложения для прогноза ветра
Найдите лучшие приложения для прогноза ветра, которые необходимы для занятий спортом, работы или даже экскурсий.
3 отличных мобильных приложения для Android, чтобы выпустить пар
Если вам нужна помощь, и вы не можете или не хотите идти к члену семьи, другу или специалисту, вот несколько полезных приложений, которые помогут выпустить пар на Android.
Лучшие скалолазные приложения для Android
Несмотря на то, что это рискованный вид спорта, у вас есть лучшие приложения для скалолазания для Android, которые стоит начать или попробовать.
Как создать ярлык в Android для любой функции?
Создание ярлыков на любой ОС всегда полезно и нужно. А здесь вы узнаете, как создать ярлык на мобильном Android.
Picsart: что это такое и как пользоваться этим мощным редактором для Android
Что такое Picsart и как использовать этот мощный редактор в системе Android и iOS, где доступно приложение.
Краткое руководство по простой и успешной публикации GIF-файлов в Instagram
Гифки нельзя напрямую загружать в Instagram, но сегодня вы узнаете о классном мобильном приложении, позволяющем легко это сделать.
Лучшие приложения для бесплатного просмотра футбола
Вы увлечены королем спорта? Мы оставляем вам некоторые из лучших приложений для просмотра бесплатного футбола, которые существуют прямо сейчас.
Каналы DTT: что это такое и как установить на Android-устройство
Мы объясняем, что такое каналы DTT и как установить приложение на ваше устройство Android, которое позволяет смотреть каналы DTT.
Лучшие приложения для комбинирования женской одежды
Не знаете, что надеть? Мы даем вам решение с этой коллекцией приложений, чтобы комбинировать женскую одежду. Ваш шкаф скажет вам спасибо.
Лучшие приложения, чтобы найти, где зарядить электромобиль
Хотите знать, какие приложения лучше всего подходят для зарядки электромобиля? Что ж, здесь мы оставляем вам самое практичное и полное.
Тренировки в тренажерном зале: лучшие приложения
Познакомьтесь с лучшими приложениями для тренировок в тренажерном зале, в том числе с некоторыми более популярными, чем другие.
Лучшие игровые приложения для пьющих пар
Вы ищете лучшие предложения для игр, чтобы выпить вдвоем? Здесь мы оставляем вам то, что обеспечит незабываемую ночь.
Лучшие 7 приложений, чтобы разделить квартиру
Мы представляем 7 лучших приложений для совместного проживания с помощью мобильного телефона Android с возможностью быстрого определения местоположения.
6 приложений для тестирования IQ для Android
Мы раскрываем 6 тестовых приложений IQ для Android-устройств, одно из них является официальным приложением.
Лучшие приложения для игры в судоку в автономном режиме
Если вы увлечены судоку, мы покажем вам лучшие приложения, с помощью которых вы сможете играть в судоку в автономном режиме в любое время и в любом месте.
Как записать видеозвонок WhatsApp? Альтернативы, которые вы должны знать
Запись видеозвонка WhatsApp больше не должна быть невыполнимой задачей, оставайтесь рядом, и я дам вам несколько советов, как это сделать.
Как открыть файл Passbook PKPASS на Android?
Файлы PKPASS официально открываются с помощью приложения Apple Passbook. Поэтому сегодня мы научимся открывать файлы Passbook на Android.
Я не могу оплатить с мобильного, почему?
Оплата с помощью мобильного телефона – обычное дело. Если у вас возникли проблемы, следуйте этим советам и избегайте проблем при совершении платежа.
Каковы лучшие приложения телесуфлера для Android
Мы расскажем вам, какие альтернативы наиболее заметны при превращении вашего телефона в автоподсказку для Android с помощью этих приложений телесуфлера.
7 приложений для создания роликов в Instagram
Список из 7 приложений для создания роликов в Instagram, многие из которых принадлежат крупным издателям, и все они бесплатны.
Что это значит и как убрать режим Fastboot с Android-устройства?
Fastboot помогает выполнять сложные задачи на Android. Поэтому важно знать о том, что это значит и как убрать режим Fastboot.
Bixby, революция виртуальной помощи в ваших руках
Bixby — это виртуальный помощник, разработанный Samsung для своих мобильных устройств, таких как смартфоны и планшеты.
Как обновить Kodi на мобильной операционной системе Android?
Kodi — это бесплатный кроссплатформенный медиаплеер с открытым исходным кодом, который в любом случае стоит знать, как установить и обновить.
Arena4viewer: APK для бесплатного просмотра футбола и спорта
Arena4viewer — это APK-файл для бесплатного просмотра футбола и спортивных состязаний на вашем устройстве, и для его использования не требуется много времени.
7 приложений для бесплатного просмотра фильмов на Android
Вы можете смотреть бесплатные фильмы на Android с помощью этих 7 важных приложений, предназначенных для пользователей телефонов, планшетов и других устройств.
Как найти мобильный iPhone с мобильного Android?
Поскольку иногда у вас есть только одно устройство Apple, важно знать, как найти iPhone с мобильного устройства Android.
Знаете ли вы, как увеличить интенсивность фонарика на вашем мобильном телефоне Android?
Мобильный фонарик обычно является полезным инструментом. Поэтому сегодня мы расскажем вам, как увеличить интенсивность фонарика вашего мобильного телефона.
Как отправить бесплатное SMS с мобильного телефона Android
Хотите узнать, как лучше всего отправлять бесплатные SMS с мобильного телефона? Что ж, здесь мы оставляем вам альтернативы, которые вы должны знать.
Можно ли бесплатно онлайн смотреть футбольный веб-контент?
Можно ли смотреть Footters онлайн бесплатно? Это невозможно, так как нет известного способа. Но здесь вы узнаете об этом больше.
Лучшие приложения для Android Auto
Сегодня мы представляем лучшие приложения, которые вы можете установить на свой смартфон, чтобы получить максимальную отдачу от Android Auto.
Android System WebView: что это за внутренний компонент и для чего он нужен?
В этой своевременной публикации мы поговорим о том, что такое Webview Android и для чего это полезное внутреннее приложение операционной системы Android.
Как использовать два WhatsApp на Android
Хотите знать, как использовать два WhatsApp на Android? Мы расскажем вам, как это сделать лучше всего, и самые полезные приложения.
Лучшие приложения, чтобы знать, когда кто-то подключается к WhatsApp
Хотите знать, какие приложения существуют, чтобы знать, когда кто-то подключается к WhatsApp? Здесь мы оставляем вам наиболее рекомендуемые.
Что такое Tasker, как он работает и как пользоваться его подпрограммами
Что такое Таскер? Мы объясним и подробно объясним, как это работает, и воспользуемся всеми функциями этого приложения для Android.
Советы и хитрости, чтобы стать мастером Pokémon Showdown: Mega Guide
В этой статье мы расскажем вам лучшие основные советы и приемы, чтобы стать настоящим мастером покемонов в Pokémon Showdown.
Приложения для профессиональных и любительских фотографов для Android
С помощью этих приложений для профессиональных фотографов и любителей вы получите эффектные фотографии для своего портфолио.
Как читать мангу на мобильном: мегагид по лучшим приложениям
Это лучшие приложения для чтения манги в любое время и в любом месте с нашим полным руководством. Узнайте, какие есть лучшие варианты.
Лучшие бесплатные приложения 2023 года
Подборка лучших бесплатных приложений этого 2023 года, где есть несколько важных, включая PicsArt.
5 лучших приложений с искусственным интеллектом
Искусственный интеллект в моде. Хотите знать, какие лучшие приложения с искусственным интеллектом? Здесь мы покажем вам.
Заявки на маршруты и расписания на Пасху 2023
Существует множество приложений, позволяющих перемещаться во время шествий Страстной недели в самых важных точках Испании.
Как превратить свой мобильный телефон в датафон
Поэтому все больше и больше магазинов довольно часто превращают свои телефоны в датафоны.
Лучшие приложения шествий Страстной недели 2023 года
Если вы хотите прожить Страстную неделю в полной мере, не пропустите эту подборку приложений для шествия Страстной недели 2023 года.
С каким трафиком ехать домой?: лучшие приложения, чтобы узнать
Познакомьтесь с лучшими приложениями, которые могут помочь вам узнать, как обстоят дела с трафиком, когда вы идете домой.
Лучшие камеры наблюдения для просмотра с мобильного телефона
Таким образом, вы можете использовать камеры наблюдения, чтобы видеть со своего мобильного телефона. Мы покажем вам лучшие варианты, которые существуют на данный момент
Спотифай не работает? Вот что нужно сделать, чтобы это исправить
В нашей статье мы даем вам лучшие альтернативы и решения в случае сбоя Spotify. Не исчерпайте свою музыку!
Узнайте, как скрыть приложения на Xiaomi
Все еще не знаете, как скрыть приложения на Xiaomi? В этой статье мы даем вам несколько методов, чтобы вы могли этого добиться.
Менеджер загрузок для Android, который вы должны скачать
У вас есть мобильный телефон Android и вы хотите быстро и легко загружать файлы? Что ж, этот пост для вас, познакомьтесь с лучшим менеджером загрузок.
Как снять страховку валлапоп
У вас есть вопросы о том, как удалить страховку Wallapop? В этой статье мы расскажем вам все, что вам нужно знать об этом.
Что означает «Принято логистическим оператором» на AliExpress
Что означает «принято логистическим оператором» на AliExpress: Рассказываем все, что нужно знать об отслеживании покупки
Это лучшие каналы Telegram для просмотра сериалов.
Если вы поклонник сериала, мы покажем вам несколько каналов Telegram, где можно смотреть сериал бесплатно и полностью.
3 отличных мобильных приложения для Android для поиска одежды по фото
Если вы один из тех, кто любит моду и одежду в целом, предлагаем вам открыть для себя 3 полезных мобильных приложения для поиска одежды по фото.
Лучшие музыкальные проигрыватели без рекламы
Войдите и нажмите здесь, чтобы узнать все о лучших музыкальных плеерах без рекламы
Аппликации крючком: создавайте уникальные аксессуары и украшения
Войдите сюда, чтобы узнать лучшие приложения для вязания крючком, чтобы вы могли делать красивые украшения и аксессуары.
Изучайте немецкий язык с лучшими приложениями для расширения своего языка
Введите и нажмите здесь, чтобы открыть для себя лучшие приложения для изучения немецкого языка. Быстро, легко и просто вы можете расширить свой язык
Как узнать, есть ли у кого-то Tinder?
Есть ли способ узнать, есть ли у кого-то Tinder? Здесь мы оставляем вам несколько приемов, чтобы легко это обнаружить.
10 лучших приложений для удаления вещей с фотографий
Не знаете, какое приложение использовать, чтобы стереть что-то с ваших фотографий? В этой статье мы даем вам лучшие приложения для устранения того, что вы хотите.
Создайте свой собственный оазис спокойствия с лучшими расслабляющими играми
Расслабляющие игры: от исследования до медитации: откройте для себя силу расслабляющих игр, которые улучшат ваше эмоциональное самочувствие.
Как отменить подписку на Тиндер
Хотите знать, как отменить подписку на Tinder? Мы подробно расскажем, как это сделать за считанные минуты без каких-либо затруднений.
Как настроить Discover Android News: The Ultimate Guide!
Как настроить Discover Android News. Полное руководство по этому приложению, чтобы получать только те новости, которые вас интересуют больше всего.
Узнайте, как легко подключить мобильный телефон к машине
Хотите узнать, как подключить свой мобильный телефон к машине? В этой статье мы расскажем вам, какие методы вы можете использовать.
Лучшие приложения, чтобы узнать почасовые участки света
Сборник с лучшими приложениями, чтобы узнать графики секций света, чтобы использовать их по максимуму.
Как поставить переходы в InShot
Мы расскажем вам, как быстро и легко поставить переходы в InShot, добиваясь профессиональных результатов для ваших видео.
6 лучших приложений для путешествий в кемперах
Все чаще совершаются поездки на природу. С помощью этих приложений вы сможете узнать лучшие места для парковки.
Как изменить свое имя в Google Meet
Мы расскажем вам простой и быстрый способ изменить имя в Google Meet, чтобы показывать вас на ваших профессиональных и личных встречах.
6 приложений для пресса на фотографиях
Мы представляем вам 6 приложений, чтобы легко накачать пресс на фотографии с вашего Android-устройства.
Teleparty: Как смотреть фильмы и сериалы с друзьями на расстоянии
Благодаря Teleparty развились вечеринки, осмельтесь хорошо провести время с друзьями, не находясь в одном месте, кино на расстоянии.
5 приложений с рецептами для планирования еды на неделю
Введите и нажмите здесь, чтобы узнать все о лучших приложениях рецептов. Удиви друзей новыми блюдами!
Виджеты часов и погоды, которые вам нужно знать
Виджеты часов и погоды — полезный и информативный инструмент для любого Android-устройства. Эти виджеты могут…
Преобразование черно-белых фотографий в цветные: 6 приложений для Android
У вас есть черно-белые фотографии? Мы покажем вам лучшие приложения для их раскрашивания в системе Android.
Изменение размера мобильных изображений: лучшие варианты для Android
Узнайте, какие приложения лучше всего подходят для изменения размера изображений на вашем мобильном телефоне и являются наиболее полными для вашего Android.
8 приложений для заработка на просмотре видео
Именно по этой причине мы сделали подборку некоторых приложений для заработка, которые мы протестировали.
Приложения для перехода от текста к аудио и голосу на Android
Мы показываем хороший список приложений для перехода от текста к аудио и речи на Android за несколько секунд.
Узнайте, как открывать файлы ODT, ODS и ODP на Android
Не знаете, как открыть файлы ODT ODS и ODP на Android? В этой статье мы расскажем вам, какие приложения вы можете использовать
Milanuncios, ведущая платформа для покупки и продажи подержанных автомобилей
Milanuncios, ведущая платформа по покупке и продаже подержанных вещей в Испании, мы объясним вам все, что она предлагает. Мы также даем вам больше возможностей.
9 приложений для эротических игр для пар, которые вы должны попробовать
Откройте для себя лучшие эротические игровые приложения X для пар, которые стоит попробовать на Android и отлично провести время.
Поиск человека по фото: все варианты
Искать человека по фото очень просто, если вы знаете нужные приложения. Войдите сюда, чтобы узнать их все.
Приложения, чтобы поместить лица на фотографии: ТОП 5
У нас есть для вас ТОП-5 лучших приложений для изображения лиц на фотографиях, они бесплатны, и вы можете скачать их в Play Store.
Лучшие запущенные приложения
Войдите и нажмите здесь, чтобы подробно увидеть топ лучших приложений для бега на свежем воздухе с вашими близкими.
Хотите стать экспертом в Instagram? научитесь измерять количество подписчиков в режиме реального времени с помощью Instastatistics
Руководство по просмотру подписчиков в режиме реального времени с помощью Instastatistics (это одно из самых простых приложений для поиска).
Экран блокировки часов: приложения, которые вы должны знать
Мета-описание: узнайте все о том, как установить часы на экран блокировки мобильного телефона Android с помощью нашего руководства.
Поставьте два мировых времени на экран мобильного телефона: лучшие приложения
Мы объясняем, как разместить два мировых времени на экране мобильного телефона, мы описываем лучшие приложения, которые вы можете установить на свой Android.
Watchfaces Apps: лучшие приложения для ваших умных часов
Приложения Циферблаты e»Откройте для себя лучшие приложения для циферблатов для Android и персонализируйте свои умные часы, как никогда раньше.
Цифровой термометр для измерения температуры: 7 лучших приложений
Мы представляем 7 лучших приложений для цифрового термометра для измерения температуры на мобильном устройстве Android.
Приложения для дизайна одежды с мобильного
В этой статье представлены 6 лучших приложений для дизайна одежды на Android, объясняются факторы, которые необходимо учитывать.
Приложения поздравляют с днем рождения всю семью и друзей
С помощью этих приложений вы сможете поздравить всех своих родных и друзей с днем рождения, но вы никогда не забудете поздравить своих близких.
Познакомьтесь с лучшими полезными сайтами и приложениями для знакомств
Не знаете, какие сайты и приложения для знакомств самые лучшие? В этой статье мы расскажем вам, какие из них наиболее популярны.
6 лучших приложений IPTV для Android
Познакомьтесь с 6 лучшими приложениями IPTV для Android, в том числе с некоторыми известными, которые всегда есть у вас под рукой бесплатно.
Лучшие альтернативные приложения для Passbook на Android
Разве вы не знаете, какие приложения являются лучшими альтернативами Passbook на Android? Здесь мы расскажем вам, что это такое и где их скачать.
Чистый динамик Android: применение и способы
Как легко очистить динамик Android, узнайте вместе с нами, как вы собираетесь чистить динамик, чтобы он звучал великолепно.
Google Play Store, скачать apk и все, что вам нужно знать
Google Play Store, загрузите любой APK и все, что вам нужно знать. И если этот магазин вам не подходит, знайте альтернативы
Лучшие бесплатные приложения для радаров, доступные на Android
Разве вы не знаете, какое лучшее бесплатное приложение для радара? В этой статье мы расскажем, что это такое и где их можно скачать и установить.
6 приложений для оцифровки негативов на Android
6 приложений для оцифровки негативов на Android, все они бесплатные, кроме одного, у которого есть платная версия.
Противоугонные приложения для защиты вашего мобильного телефона и вашей информации
Познакомьтесь с этими противоугонными приложениями для защиты вашего мобильного телефона, мы также дадим вам советы по хорошей защите вашей информации.
Snaptube, скачивайте видео с любого сайта
Snaptube, загружайте видео с любого веб-сайта: YouTube, Facebook, DailyMotion, Animeq, TikTok, Instagram, Vimeo, MetaCafe, Whatsapp и т. д.
Узнайте, как измерить расстояние на Google Картах
Вы хотите измерить расстояние с помощью карт Google ваших маршрутов? В этой статье мы расскажем вам, как это сделать с вашего компьютера или мобильного телефона.
6 антилай-приложений для Android
В этой статье у вас есть 6 приложений антилая для Android, все они доступны для вашего телефона.
Игры от стресса на андроид
Войдите и нажмите здесь, чтобы отложить рутину и узнать больше о лучшей игре на стресс для Android.
Топ лучших приложений для свадеб
Войдите и нажмите здесь, чтобы открыть для себя лучшие свадебные приложения. И так вы можете облегчить это великое событие.
Лучшие приложения обоев, которые двигаются
Смотрим в телефон более ста раз в день, дарим глазам подарок, узнаем о лучших приложениях с движущимися обоями
Топ лучших приложений для питья воды
Хотите начать здоровую жизнь? Подробно ознакомьтесь с Топ лучших приложений для питья воды.
Как сделать скриншот на самсунге
Мы собираемся объяснить, как сделать снимок экрана на Samsung, это очень простая процедура, и есть несколько способов.
Как использовать приложение Google Weather и вывести погоду на экран
Как использовать приложение Google Weather и отображать время на экране, легко узнать, приходите и научитесь делать это вместе с нами.
Как легко узнать текущую высоту или высоту любой точки?
Если вы хотите узнать, как вы можете узнать свою текущую высоту или высоту любой точки, мы объясним, как это сделать простым способом.
Как легко оплатить с мобильного с помощью BBVA?
Если вы хотите знать, как легко платить со своего мобильного телефона с помощью BBVA, у нас есть вся необходимая для этого информация.
FlashScore: что это такое и лучшие альтернативы
Узнайте подробно, что такое FlashScore, как им пользоваться, а также о бесплатных альтернативах, чтобы следить за своими любимыми играми со своего мобильного телефона.
Скачать музыку бесплатно без регистрации: лучшие бесплатные приложения
Загрузка бесплатной музыки без регистрации возможна, вам просто нужно скачать приложения, которые мы указываем здесь, вы можете найти их в Play Store.
Загрузите последнюю версию Master Royale Infinity
Откройте для себя веселую игру Master Royale и попрощайтесь с неравенством, царящим в официальной игре Clash Royale.
эстетические приложения для андроида
Измените внешний вид своего мобильного телефона и придайте ему индивидуальность, настроив каждую деталь внешнего вида вашего экрана.
Скачать бесплатную музыку на Android
Сегодня мы представляем вам лучшие способы загрузки музыки на свой мобильный телефон, чтобы у вас не закончились данные неожиданно, нажмите «Воспроизвести».
Как подключить Alexa к мобильному телефону
Знание того, как подключить Alexa к мобильному телефону, может быть чрезвычайно полезным, в этой статье мы расскажем вам, как вы можете этого добиться и какие у него есть преимущества.
Лучшие приложения для эстетических обоев
Какие они и сборник лучших эстетических обоев, которые можно скачать на мобильные устройства.
Idiotizer: приложение для лучшей улыбки
Если вы хотите знать все, что связано с Idiotizer, забавным приложением для изменения голоса, у нас есть вся информация здесь.
Лучшие приложения для измерения температуры в вашем доме
Если вы хотите узнать, какие приложения лучше всего подходят для измерения температуры в вашем доме, вы попали в нужное место.
Фильтр Pixar: что это такое и как его получить?
Пользователи мобильных устройств и RRSS часто наслаждаются эффектами, вызываемыми функциями фильтрации. Поэтому сегодня мы обратимся к фильтру Pixar.
Как узнать, совместим ли мой автомобиль с Android Auto?
Как узнать, совместим ли мой автомобиль с Android Auto? Если вы задавались этим вопросом, то здесь мы подробно все на эту тему и многое другое.
Радар флирта: так ли хорошо флиртовать?
Ligues Radar — это возможность найти людей, которые хотят флиртовать рядом с вами, войти и встретить свою вторую половинку.
Лучшие приложения для просмотра аниме на испанском языке
Подборка лучших приложений для просмотра аниме на испанском языке с мобильных устройств, доступных в Play Store.
Приложения для взлома игр на вашем Android
Да, есть приложения для взлома игр на вашем Android, мы расскажем вам, что это такое, чтобы вы могли умножить свои монеты, драгоценные камни и многое другое.
Какое лучшее приложение для бесплатного просмотра баскетбола?
Познакомьтесь и выберите из нескольких рекомендованных приложений лучшее приложение, чтобы смотреть баскетбол бесплатно, а также не пропускать ни одной игры.
6 лучших приложений для расшифровки WiFi с Android
За последние годы безопасность внутренних соединений поднялась на несколько ступеней, и все благодаря…
Upday: что это такое и как его отключить
Чтобы вы могли деактивировать уведомления Upday или удалить его со своего мобильного телефона, вам просто нужно прочитать статью, которую мы подготовили для вас.
Лучшее приложение для продажи фотографий ступней и его лучшие альтернативы
Это лучшее приложение для продажи фотографий ступней и альтернатив, которые вы можете найти, чтобы заработать на этом бизнесе.
Приложения для Android закрываются сами собой: что следует знать
Приложения для Android закрываются сами собой, мы объясняем, почему это связано, попробуем решить с помощью имеющихся у нас решений.
Как скачать GIF из Твиттера со своего мобильного
Если вы хотите узнать, как скачать GIF-файлы Tweeter, сегодня мы предлагаем вам лучшие формулы для этого.
Как я могу контролировать циклы зарядки в Android?
Не знаете, как контролировать циклы зарядки в Android? В этой статье мы расскажем вам, что они собой представляют и как их контролировать.
Как получить бесплатную доставку на Wallapop?
Если вы хотите узнать, как получить бесплатную доставку в Wallapop, оставайтесь с нами, у нас есть вся необходимая информация для вас.
Лучшие приложения для радио без интернета
Лучшие приложения для радио без Интернета, которые мы можем бесплатно скачать в Play Store для экономии мобильных данных.
Лучшие универсальные приложения для трекеров активности
Коллекция лучших универсальных приложений для трекеров активности, совместимых с устройствами Android, которые доступны бесплатно.
Нодофликс: все, что вам нужно знать
Чтобы вы могли использовать Nodoflix и наслаждаться всеми вашими любимыми играми, вам просто нужно прочитать статью, которую мы подготовили для вас.
Лучшие приложения для просмотра фильмов и сериалов бесплатно
Чтобы вы могли хорошо провести время, мы даем вам лучшие приложения для просмотра фильмов и сериалов бесплатно. Входит.
Гель: как это работает?
Если вы хотите знать все о Gelt: как это работает? и еще много вопросов, оставайтесь с нами, у нас есть информация.
WeWard: приложение, которое платит за прогулку
Встречайте WeWard, приложение, которое платит вам за ходьбу с помощью мобильного устройства или планшета, испытания и многое другое.
Crossfade: функция Spotify, о которой вы не знали
Не знаете, что такое Spotify Crossfade? Вам просто нужно прочитать эту статью, которую мы подготовили для вас со всем, что вам нужно знать.
9 лучших приложений для путешествий
Если вы уже решили, какой будет ваша следующая поездка, не стесняйтесь использовать приложения для путешествий, которые мы оставили вам в этом списке.
Лучшие приложения для обмена сообщениями Google
Компиляция с лучшими приложениями Google для обмена сообщениями, которые в настоящее время доступны в Play Store для устройств Android.
Что такое ShareMe и как им пользоваться?
Чтобы вы могли перемещать тяжелые данные и документы с одного Android на другой, просто узнайте, что такое ShareMe и как его использовать здесь.
Приложения калькулятора энергии для солнечных батарей.
Узнайте, какие приложения-калькуляторы энергии для солнечных батарей являются лучшими, мы расскажем вам об этом все.
Альтернативы Playdede: все фильмы на вашем мобильном
Мы представляем несколько альтернатив Playdede, чтобы вы могли использовать свой мобильный телефон для просмотра фильмов и сериалов, которые заставят вас развлечься.
Приложения для онлайн-лотереи для вашего Android
В этом списке онлайн-приложений для розыгрыша вы найдете приложения для розыгрыша с использованием барабанов, чисел, игральных костей и колес рулетки.
Лучшие приложения для редактирования фотографий в движении
Коллекция лучших приложений для редактирования фотографий в движении, которые можно загрузить из Android Play Store.
10 лучших приложений для отслеживания посылок
Отслеживание ваших посылок больше не должно быть проблемой, если вы знаете 10 лучших приложений для отслеживания посылок для Android.
Wallapop Web: идеальное приложение для подержанных вещей
Wallapop Web — одна из лучших платформ для продажи или покупки подержанных вещей, у нее есть множество вариантов, которые вас удивят.
Способ отключить автоматическую загрузку Telegram
Чтобы вы могли отключить автоматическую загрузку из Telegram, мы подготовили статью с шагами, которые вы должны выполнить.
Приложения для получения подписчиков в Instagram на Android
Сборник лучших приложений для накрутки подписчиков в Instagram из операционной системы Android.
Лучшие приложения, чтобы поздравить с Новым годом и получить 2023
Подборка, в которой вы найдете лучшие приложения, чтобы поздравить с Новым годом и получить 2023 год, чтобы удивить своих друзей и близких.
Медленная загрузка Telegram: шесть решений
Telegram загружается медленно, если это так, мы даем вам пять решений для исправления этой ошибки, которая обычно иногда возникает.
Лучшие приложения для улучшения качества фотографий с Android
Узнайте о лучших приложениях для улучшения качества фотографий с Android за несколько шагов, используя фильтры и утилиты.
Лучшие бесплатные приложения, чтобы подправить свое тело
Нет ничего плохого в редактировании ваших фотографий, воспользуйтесь этим списком лучших бесплатных приложений, чтобы ретушировать свое тело.
Коди не работает: как узнать ошибки и найти решения
Коди у вас не работает? Мы научим вас, как узнать ошибки из вашего журнала и найти с ними все решения проблем.
Лучшие приложения для присоединения к видео для Android
Если вам нужно составить композицию видео, здесь мы представляем лучшие приложения для объединения видео на Android.
Лучшие погодные приложения для Android
Это лучшие приложения, чтобы всегда быть в курсе погоды в вашем районе с помощью мобильного устройства Android.
Приложения для добавления музыки в видео на Android
Коллекция лучших приложений для быстрого и простого добавления музыки в видео на Android.
Перенос фотографий с Android на iPhone через Bluetooth
Перенос фотографий с Android на iPhone через Bluetooth сложнее, чем кажется, но мы объясним вам это шаг за шагом.
Лучшие рождественские приложения для Android
Подборка с лучшими рождественскими приложениями, которые можно скачать для Android из Play Store.
6 приложений для знакомства с людьми из других стран с вашего мобильного Android
Мы покажем вам 6 лучших приложений для знакомства с людьми из других стран с вашего телефона Android, и все это легко.
Лучшие приложения для создания аватара AI на Android
Подборка лучших приложений для создания ИИ-аватара, которые мы можем загрузить из Android Play Store.
Лучшие приложения для новогодней ночи 2022 года
Подборка с лучшими приложениями на Новый год 2022, которые мы можем бесплатно скачать на Android и iOS.
Лучшие приемы гугл-переводчика, о которых вы не знали
Если вы любите путешествовать, мы даем вам лучшие приемы Google-переводчика, чтобы вы могли быстро общаться на любом языке.
Как быстро и легко скачать музыку в формате MP3?
Если вы хотите узнать, как легко и быстро скачать музыку в формате mp3, вы пришли в нужное место. У нас есть все, что вам нужно.
Как быстро и легко скачать apk Dixmax?
Если вы хотите узнать, как быстро и легко скачать Dixmax apk, мы расскажем вам все, что вам нужно для этого, продолжайте читать.
Tivify, новое приложение для просмотра бесплатных каналов на вашем мобильном телефоне
Tivify — это новое приложение для просмотра бесплатных каналов на мобильном телефоне, которое также можно использовать на других устройствах.
Обои Реал Мадрид: лучшее для вашего мобильного телефона
Здесь вы найдете лучшие обои Реал Мадрид для вашего мобильного устройства или для любого монитора, который вы хотите.
Лучшие приложения для поиска моего мобильного телефона
Сборник приложений для определения местонахождения мобильного телефона в зависимости от производителя или операционной системы.
Stardeos: что это такое и как использовать прямого конкурента YouTube
Что такое Стардеос? Мы покажем вам, как использовать прямого конкурента YouTube, платформу, запущенную Dalas Review.
App My Scoreboards: спортивные результаты у вас на ладони
Приложение «Мои закладки» — одно из лучших, где можно узнать все о спортивных результатах, например, об игре в Лиге чемпионов.
Найдите все: приложение, чтобы получить все
Благодаря технологиям можно узнать, где находятся корабли, самолеты и даже люди. Один из многих…
Приложения для работы с мобильного
Работать с мобильного не только возможно, это реальность, мы покажем вам лучшие приложения для работы с мобильного
Spotify Premium APK Без подписки
Музыка движет всеми фибрами, у каждого из нас есть любимая песня. Просто музыка – это часть нашей жизни….
Что такое виджеты Android: очень полезные мини-приложения
Если вы не знали о виджетах, значит, вы многое упустили из своего Android. Но, это заканчивается сегодня, мы говорим вам, что они есть.
Так что вы можете смотреть DAZN бесплатно легально
Мы объясняем, как смотреть DAZN бесплатно, платформу, которая иногда предлагает ежемесячную или еженедельную подписку, чтобы попробовать ее.
Как заблокировать приложения на Android различными способами
Войдите сюда, мы объясним, как блокировать приложения Android различными способами, используя приложения или собственные настройки этих мобильных ОС.
Лучшие приложения, чтобы завести невидимого друга онлайн
Подборка лучших веб-сайтов (и приложений), чтобы сделать невидимого друга онлайн наилучшим образом.
6 лучших эмуляторов Android для Windows
В этом списке мы покажем вам 6 лучших эмуляторов Android для Windows, в которых не мог отсутствовать известный BlueStacks.
Приложения для оригинальных поздравлений с Рождеством 2022
Подборка лучших приложений для оригинальных поздравлений с Рождеством 2022 родным или друзьям.
Бесплатный футбол на вашем мобильном: 6 легальных вариантов
Бесплатный футбол на вашем мобильном телефоне, с помощью этих приложений вы сможете смотреть самый захватывающий вид спорта в мире. Войдите сюда и знайте только лучшее.
Лучшие приложения для случайной рулетки на Android
Подборка лучших приложений для случайной рулетки, которые в настоящее время находятся в магазине Google Play.
10 лучших приложений для обоев для Android
Подборка лучших приложений для обоев, которые можно загрузить для Android из магазина Google Play.
Приложения для рисования кавайных рисунков на Android
7 рекомендуемых приложений для рисования в стиле каваи, которые можно бесплатно загрузить из магазина Google Play.
Рейтинг лучших приложений для беременности
Введите и нажмите здесь, чтобы узнать больше о рейтинге лучших приложений для беременности.
Как найти рестораны рядом с моим текущим местоположением?
Хотите знать, как найти рестораны рядом с моим текущим местоположением? Не стесняйтесь читать статью, которую мы подготовили для вас.
Что такое музыка Amazon и как она работает?
Если вы хотите узнать, что такое музыка Amazon и как она работает, вы пришли в нужное место, так как в этой статье мы объясним вам это.
Трюки для бесплатного просмотра Netflix, которые вы не можете пропустить
Если вы хотите узнать лучшие приемы бесплатного просмотра Netflix, вы должны войти сюда. Мы предлагаем вам безошибочные трюки, чтобы вы могли наслаждаться этим.
Каковы лучшие приложения, чтобы узнать свой менструальный календарь?
Введите и нажмите здесь, чтобы подробно узнать все о лучших приложениях менструального календаря
Топ лучших приложений для фитнес-людей
Войдите и нажмите здесь, чтобы узнать подробно и подробно об этом Top Best Applications for Fitness People.
Что вы должны знать о Steam для Android
Steam для Android — это приложение, призванное улучшить игровой процесс для всех, кто использует Steam для компьютеров.
Лучшие музыкальные трюки YouTube
В нашем блоге вы найдете список приемов YouTube Music, которые помогут вам максимально эффективно использовать это потоковое музыкальное приложение.
Топ лучших игр с переодеванием
Войдите и нажмите здесь, чтобы узнать и узнать все о широком топе лучших игр с переодеванием на сегодняшний день.
Самые профессиональные альтернативы Canva
В нашем блоге есть список альтернатив Canva, чтобы у вас было больше возможностей для редактирования личных или профессиональных фотографий.
Сколько верблюдов стоит моя девушка: лучшие приложения
Сколько верблюдов стоит моя девушка? С помощью этих приложений и веб-сайта мы можем узнать и посмеяться.
Какие игры по уходу за домашними животными самые лучшие?
Домашний питомец перестал быть просто мечтой. Вот почему зайдите и нажмите здесь, чтобы узнать о лучших играх по уходу за домашними животными с вашего мобильного телефона.
Секреты Netflix для Android
Если вы хотите узнать секреты Netflix для Android, мы приглашаем вас посетить наш блог, чтобы узнать все подробности.
Лучшие приложения для чтения книг на Android
В нашем блоге вы получите список лучших приложений для чтения книг на Android, которые вы так долго ждали. Войдите, чтобы узнать подробности.
Что делать с ошибками Twitter на Android?
Ошибки Twitter на Android очень распространены, и мы расскажем вам, что вы можете сделать, чтобы решить каждую из них.
Google Pay против Samsung Pay: какой цифровой кошелек лучше?
С появлением такого количества кошельков, способных совершать платежи NFC, возникает вопрос об использовании Samsung Pay или Google Pay на Android.
Лучшие трюки Android Spotify
Есть хитрости для Android Spotify, которые позволят вам лучше использовать все функции, которые это приложение предлагает пользователям.
Приложения для поиска работы
Делайте то, что вам нравится, не выходя из дома. Это лучшие приложения для поиска работы.
Хотите скачать музыку с YouTube на свой мобильный?
Если вы ищете, как скачать музыку с YouTube на свой мобильный телефон, в этой статье мы дадим вам несколько очень полезных приложений и методов.
Новое приложение Duolingo Math поможет вам с математикой
Узнайте все о новом приложении Duolingo Math, войдите сюда и узнайте вместе с нами все, что предлагает вам это приложение.
Каналы Telegram, которые вам не хватает
Существуют разные каналы Telegram, чтобы вы могли наслаждаться разнообразным контентом, и здесь мы указываем, какие из них вам подходят лучше всего.
Встречайте самые мощные планшеты 2022 года
Некоторые из самых мощных планшетов используют операционную систему Android, и если вы хотите узнать, что это за модели, зайдите в наш блог.
Лучшие приложения для бесплатной ретуши фотографий на Android
В этой статье мы упоминаем лучшие приложения для бесплатной ретуши фотографий на вашем Android-устройстве всего за несколько шагов.
Безопасен ли аптоид?
Здесь мы расскажем вам все, что вам нужно знать об Aptoide и о гарантиях, которые он предлагает вам с точки зрения безопасности.
Где скачать бесплатные любовные романы?
Если ваша страсть — любовные романы, но вы не знаете, как получить их бесплатно, вы обратились по адресу. Здесь мы объясним вам, как это сделать.
Лучшие альтернативы Spotify
Если вы ищете лучшие альтернативы Spotify, приглашаем вас в наш блог. У нас самый большой список приложений для потоковой передачи музыки.
Videoscribe: Альтернативы для Android
Если вы ищете альтернативы Videoscribe, то это одни из лучших для Android, которые вы можете найти.
Как включить или выключить мобильный фонарик
Если вам нужен быстрый доступ к фонарику вашего мобильного телефона, сегодня мы расскажем вам, как вы можете быстро и легко включать и выключать его.
Хотите знать, как скачать музыку в Telegram?
Научиться скачивать музыку в Telegram не так сложно, как кажется. В этой статье мы покажем вам, как это сделать.
Netflix не разрешает совместное использование аккаунта
Netflix не прислушался к своему сообществу: он не разрешает совместное использование аккаунта и, похоже, все у него идет неплохо.
Как перенести приложения с одного мобильного на другой?
Как отправлять заявки между телефонами? Это может стать трудным, если вы не знаете, как это сделать, поэтому здесь мы объясним вам это.
Как использовать APK-зеркало из Google Play
Как скачать и установить APK Mirror из Google Play, чтобы установить APK-файлы, которые можно найти в Интернете.
Лучшие приложения для изучения французского на Android
Узнайте о лучших приложениях для изучения французского языка на устройствах Android, в частности о шести.
Сделайте очень темные фотографии ярче
В Android обычно есть приложения почти для всего. Это один из таких случаев, когда нам нужно осветить очень темные фотографии, чтобы улучшить их.
Как работает iVoox для прослушивания и размещения подкастов
Сегодня мы объясняем, как работает приложение и веб-версия платформы Ivoox, вы можете слушать и загружать свои любимые подкасты.
Приложения, чтобы узнать, какими будут ваши дети
Интересно представить, какими будут ваши дети, когда они станут взрослыми. И для этого существуют различные приложения, чтобы посмотреть, как будут развиваться ваши дети, если вы того пожелаете.
Лучшие приложения, чтобы избежать пробок на Android
Познакомьтесь с лучшими приложениями, чтобы избежать пробок с помощью вашего Android-устройства, благодаря им вы можете видеть, что происходит в режиме реального времени.
Лучшие альтернативы Flickr
Если вы ищете альтернативу Flickr, здесь мы покажем вам 9 лучших приложений, которые вы можете найти для своего Android.
Лучшие альтернативы Omegle
Познакомьтесь с шестью лучшими альтернативами Omegle, некоторые из которых известны пользователям, а другие не очень.
6 приложений для изучения корейского языка на вашем устройстве Android
В этой статье мы представляем вам 6 приложений для изучения корейского языка на вашем Android-устройстве, будь то телефон или планшет.
Как запатентовать приложение в Испании
Если вы разработали приложение и хотите знать, как его запатентовать и защитить, вот шаги, которые вы должны выполнить.
6 приложений для кето-диеты на Android
Мы рекомендуем эти 6 приложений для соблюдения кето-диеты на Android, чтобы похудеть и научиться есть.
Пять лучших приложений для оформления приглашений
Здесь у вас есть пять лучших приложений для создания собственных приглашений, ваши лучшие мероприятия с оригинальными приглашениями.
Лучшие приложения для защиты вашего мобильного Android
Мы покажем вам лучшие приложения для защиты вашего мобильного телефона Android, в основном с бесплатными утилитами.
6 приложений для изучения японского языка с мобильного телефона
Изучать японский язык с помощью мобильного телефона так же просто, как ходить в школу, и все это без физического присутствия.
Это самые используемые приложения в мире
Вы когда-нибудь задумывались, какие приложения наиболее часто используются в мире? Мы покажем вам, что они из себя представляют.
Что лучше: приложение или браузер?
Что лучше между использованием приложения или браузера? Преимущества и недостатки каждого из них и лучших доступных браузеров.
6 приложений для проверки цены на газ
Познакомьтесь с этими 6 приложениями для проверки цены на газ, в том числе с некоторыми известными, такими как GasofApp.
Что такое BeReal, модная социальная сеть, охватившая Android и iOS
Мы рассказываем вам все секреты социальной сети на данный момент: что такое Bereal и как работает это веселое и естественное приложение.
Лучшие приложения для игроков в гольф
В Android Guides мы решили помочь вам и показать вам, какие приложения являются лучшими для игроков в гольф.
Samsung Pay: что это такое и как это работает
Узнайте, как работает Samsung Pay — встроенный кошелек для устройств Samsung, позволяющий осуществлять бесконтактные платежи.
6 Android-приложений для списка дел
Быстро наведите порядок с помощью этих 6 приложений для списка дел для Android.
Лучшие приложения для велосипедистов на Android
Познакомьтесь с лучшими приложениями для велосипедистов для Android, благодаря им вы сможете составить маршрут, проверить физическую активность и многое другое.
7 лучших приложений для умного дома
Это список лучших приложений для умного дома, включая преимущества каждого из них и их минимальную версию для Android.
Скачать ролики из Instagram
Для тех, кто хочет скачать Reels для Instagram, есть хорошие и доступные альтернативы для такой задачи на ПК или Android.
WeChat: что это такое и зачем его устанавливать
Если вы хотите знать, что такое WeChat и почему его стоит установить на свой телефон Android, мы вам все расскажем.
ТераБокс того стоит? Сравнение и мнение
Сравнение облачных хранилищ с приложением для Android и мнение Terabox.
Что посмотреть на Disney Plus: весь контент платформы
Это все, что вы можете увидеть сегодня на Disney Plus, полном каталоге контента платформы.
Удаленное управление с помощью мобильного телефона: приложения для Android
Когда у нас есть оборудование с различными элементами управления, идеально знать, какие приложения Android существуют для использования в качестве пульта дистанционного управления с мобильным устройством.
Приложения для экономии заряда батареи на Android
6 приложений для экономии заряда батареи на вашем телефоне Android, все в автоматическом режиме и с разрешениями.
Это лучшее время для публикации в TikTok
Мы показываем вам лучшие часы для публикации в TikTok, социальной сети, где загружаются короткие, но впечатляющие видео.
Лучшие спортивные приложения для Android
Познакомьтесь с лучшими приложениями для тренажерного зала для Android, с которыми вы сможете добиться наилучших результатов и быть на хорошем уровне.
Лучшие созвездия для Android
Познакомьтесь с лучшими приложениями созвездий для Android, в каждом из которых есть интересные вещи, чтобы вы ничего не пропустили с неба.
4 приложения для измерения децибел с помощью мобильного телефона
Если вам нужно знать, сколько шума в том месте, где вы сейчас находитесь, вы можете измерить децибелы с помощью своего мобильного телефона и некоторых бесплатных приложений.
Привет, Хабр! Представляю вашему вниманию вольный перевод «Руководство по архитектуре приложения (Guide to app architecture)» из JetPack. Все замечания по переводу прошу оставлять в комментариях, и они будут исправлены. Так же для всех будут полезны комментарии от тех кто использовал представленную архитектуру с рекомендациями её использования.
Это руководство охватывает лучшие практики и рекомендуемую архитектуру для создания надежных приложений. Эта страница предполагает базовое знакомство с Android Framework. Если вы новичок в разработке приложений для Android, ознакомьтесь с нашими руководствами для разработчиков, чтобы начать работу и узнать больше о концепциях, упомянутых в этом руководстве. Если вы интересуетесь архитектурой приложений и хотели бы ознакомиться с материалами этого руководства с точки зрения программирования на Kotlin, ознакомьтесь с курсом Udacity «Разработка приложений для Android с помощью Kotlin».
Опыт пользователя мобильного приложения
В большинстве случаев настольные приложения имеют единую точку входа с рабочего стола или программы запуска, а затем запускаются как единый монолитный процесс. Приложения на Android имеют гораздо более сложную структуру. Типичное приложение для Android содержит несколько компонентов приложения, включая Activities, Fragments, Services, ContentProviders и BroadcastReceivers.
Вы объявляете все или некоторые из этих компонентов приложения в манифесте приложения. Затем ОС Android использует этот файл, чтобы решить, как интегрировать ваше приложение в общий пользовательский интерфейс устройства. Учитывая, что правильно написанное приложение Android содержит несколько компонентов, и пользователи часто взаимодействуют с несколькими приложениями за короткий промежуток времени, приложения должны адаптироваться к различным типам рабочих процессов и задач, управляемых пользователями.
Например, рассмотрим, что происходит, когда вы делитесь фотографией в своем любимом приложении для социальных сетей:
- Приложение вызывает намерение (Intent) камеры. Android запускает приложение камеры для обработки запроса. На данный момент пользователь покинул приложение для социальных сетей, и его опыт как пользователя безупречен.
- Приложение камеры может вызывать другие намерения, например запуск средства выбора файлов, которое может запустить еще одно приложение.
- В конце концов, пользователь возвращается в приложение социальной сети и делится фотографией.
В любой момент процесса пользователь может быть прерван телефонным звонком или уведомлением. После действия, связанного с этим прерыванием, пользователь ожидает, что сможет вернуться и возобновить этот процесс обмена фотографиями. Такое поведение переключения приложений распространено на мобильных устройствах, поэтому ваше приложение должно правильно обрабатывать эти моменты (задачи).
Помните, что мобильные устройства также ограничены в ресурсах, поэтому в любой момент операционная система может уничтожить некоторые процессы приложения, чтобы освободить место для новых.
Учитывая условия этой среды, компоненты вашего приложения могут запускаться по отдельности и не по порядку, а операционная система или пользователь могут уничтожить их в любое время. Поскольку эти события не находятся под вашим контролем, вы не должны хранить какие-либо данные или состояния в ваших компонентах приложения, и ваши компоненты приложения не должны зависеть друг от друга.
Общие архитектурные принципы
Если вы не должны использовать компоненты приложения для хранения данных и состояния приложения, как вы должны разрабатывать свое приложение?
Разделение ответственности
Самый важный принцип, которому нужно следовать, — это разделение ответственности. Распространена ошибка, когда вы пишете весь свой код в Activity или Fragment. Это классы пользовательского интерфейса которые должны содержать только логику обрабатывающую взаимодействие пользовательского интерфейса и операционной системы. Как можно больше разделяя ответственность в этих классах (SRP), вы можете избежать многих проблем, связанных с жизненным циклом приложения.
Управление пользовательским интерфейсом из модели
Другой важный принцип заключается в том, что вы должны управлять своим пользовательским интерфейсом из модели, предпочтительнее из постоянной модели. Модели — это компоненты, которые отвечают за обработку данных для приложения. Они не зависят от объектов View и компонентов приложения, поэтому на них не влияют жизненный цикл приложения и связанные с ним проблемы.
Постоянная модель идеально подходит по следующим причинам:
- Ваши пользователи не потеряют данные, если ОС Android уничтожит ваше приложение, чтобы освободить ресурсы.
- Ваше приложение продолжает работать в тех случаях, когда сетевое соединение нестабильно или недоступно.
Организовывая основу вашего приложение на модельных классах с четко определенной ответственностью по управлению данными, ваше приложение становится более тестируемым и поддерживаемым.
Рекомендуемая архитектура приложения
Этот раздел демонстрирует как структурировать приложение, используя компоненты архитектуры, работая в сквозном сценарии использования.
Примечание. Невозможно иметь один способ написания приложений, который лучше всего подходит для каждого сценария. При этом рекомендованная архитектура является хорошей отправной точкой для большинства ситуаций и рабочих процессов. Если у вас уже есть хороший способ написания приложений для Android, соответствующий общим архитектурным принципам, менять его не стоит.
Представьте, что мы создаем пользовательский интерфейс, который показывает профиль пользователя. Мы используем приватный API и REST API для извлечения данных профиля.
Обзор
Для начала рассмотрим схему взаимодействия модулей архитектуры готового приложения:
Обратите внимание, что каждый компонент зависит только от компонента на один уровень ниже его. Например, Activity и Fragments зависят только от модели представления. Repository является единственным классом, который зависит от множества других классов; в этом примере хранилище зависит от постоянной модели данных и удаленного внутреннего источника данных.
Этот дизайн паттерн создает последовательный и приятный пользовательский опыт. Независимо от того, вернется пользователь к приложению через несколько минут после его закрытия или спустя несколько дней, он мгновенно увидит информацию пользователя о том, что приложение сохраняется локально. Если эти данные устарели, модуль хранилища приложения начинает обновлять данные в фоновом режиме.
Создаём пользовательский интерфейс
Пользовательский интерфейс состоит из фрагмента UserProfileFragment
и соответствующего ему файла макета user_profile_layout.xml
.
Для управления пользовательским интерфейсом наша модель данных должна содержать следующие элементы данных:
- User ID: идентификатор пользователя. Лучшим решением является передача этой информации во фрагмент, используя аргументы фрагмента. Если ОС Android разрушает наш процесс, эта информация сохраняется, поэтому идентификатор будет доступен при следующем запуске нашего приложения.
- User object: класс данных, который содержит сведения о пользователе.
Мы используем UserProfileViewModel
, основанный на компоненте архитектуры ViewModel, чтобы сохранить эту информацию.
Объект ViewModel предоставляет данные для определенного компонента пользовательского интерфейса, таких как fragment или Activity, и содержит бизнес-логику обработки данных для взаимодействия с моделью. Например, ViewModel может вызывать другие компоненты для загрузки данных и может пересылать запросы пользователей на изменение данных. ViewModel не знает о компонентах пользовательского интерфейса, поэтому на него не влияют изменения конфигурации, такие как воссоздание Activity при повороте устройства.
Теперь мы определили следующие файлы:
user_profile.xml
: определили макет пользовательского интерфейса.UserProfileFragment
: описали контроллер пользовательского интерфейса, который отвечает за отображение информации пользователю.UserProfileViewModel
: класс отвечающий за приготовление данных для отображения их вUserProfileFragment
и реагирует на взаимодействие с пользователем.
В следующих фрагментах кода показано начальное содержимое этих файлов. (Файл макета опущен для простоты.)
class UserProfileViewModel : ViewModel() {
val userId : String = TODO()
val user : User = TODO()
}
class UserProfileFragment : Fragment() {
private val viewModel: UserProfileViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.main_fragment, container, false)
}
}
Теперь, когда у нас есть эти модули кода, как мы их соединяем? После того как пользовательское поле установлено в классе UserProfileViewModel, нам нужен способ информировать пользовательский интерфейс.
Примечание. SavedStateHandle позволяет ViewModel получить доступ к сохраненному состоянию и аргументам связанного фрагмента или действия.
// UserProfileViewModel
class UserProfileViewModel(
savedStateHandle: SavedStateHandle
) : ViewModel() {
val userId : String = savedStateHandle["uid"] ?:
throw IllegalArgumentException("missing user id")
val user : User = TODO()
}
// UserProfileFragment
private val viewModel: UserProfileViewModel by viewModels(
factoryProducer = { SavedStateVMFactory(this) }
...
)
Теперь нам нужно сообщить нашему Фрагменту, когда получен пользовательский объект. Вот тут-то и появляется компонент архитектуры LiveData.
LiveData — это наблюдаемый держатель данных. Другие компоненты в вашем приложении могут отслеживать изменения объектов, используя этот держатель, не создавая явных и жестких путей зависимости между ними. Компонент LiveData также учитывает состояние жизненного цикла компонентов вашего приложения, таких как Activities, Fragments и Services, и включает логику очистки для предотвращения утечки объектов и чрезмерного потребления памяти.
Примечание. Если вы уже используете такие библиотеки, как RxJava или Agera, вы можете продолжать использовать их вместо LiveData. Однако при использовании библиотек и подобных подходов убедитесь, что вы правильно обрабатываете жизненный цикл своего приложения. В частности, убедитесь, что вы приостановили свои потоки данных, когда связанный LifecycleOwner остановлен, и уничтожили эти потоки, когда связанный LifecycleOwner был уничтожен. Вы также можете добавить артефакт android.arch.lifecycle: реактивные потоки, чтобы использовать LiveData с другой библиотекой реактивных потоков, такой как RxJava2.
Чтобы включить компонент LiveData в наше приложение, мы меняем тип поля в UserProfileViewModel
на LiveData . Теперь UserProfileFragment
информируется об обновлении данных. Кроме того, поскольку это поле LiveData поддерживает жизненный цикл, оно автоматически очищает ссылки, когда они больше не нужны.
class UserProfileViewModel(
savedStateHandle: SavedStateHandle
) : ViewModel() {
val userId : String = savedStateHandle["uid"] ?:
throw IllegalArgumentException("missing user id")
val user : LiveData<User> = TODO()
}
Теперь модифицируем UserProfileFragment
для наблюдения за данными во ViewModel
и для обновления пользовательского интерфейса в соответствии с изменениями:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.user.observe(viewLifecycleOwner) {
// обновляем UI
}
}
Каждый раз, когда данные профиля пользователя обновляются, вызывается обратный вызов onChanged(), и пользовательский интерфейс обновляется.
Если вы знакомы с другими библиотеками, в которых используются наблюдаемые обратные вызовы, возможно, вы поняли, что мы не переопределили метод onStop() фрагмента, чтобы прекратить наблюдать за данными. Этот шаг не является обязательным для LiveData, поскольку он поддерживает жизненный цикл, это означает, что он не вызовет обратный вызов onChanged()
, если фрагмент находится в неактивном состоянии; то есть он получил вызовonStart(), но еще не получил onStop()
). LiveData также автоматически удаляет наблюдателя при вызове метода onDestroy() у фрагмента.
Мы не добавили никакой логики для обработки изменений конфигурации, таких как поворот экрана устройства пользователем. UserProfileViewModel
автоматически восстанавливается при изменении конфигурации, поэтому, как только создается новый фрагмент, он получает тот же экземпляр ViewModel
, и обратный вызов вызывается немедленно с использованием текущих данных. Учитывая, что объекты ViewModel
предназначены для того, чтобы пережить соответствующие объекты View
, которые они обновляют, вы не должны включать прямые ссылки на объекты View
в вашу реализацию ViewModel. Для получения дополнительной информации о сроке службы ViewModel
соответствует жизненному циклу компонентов пользовательского интерфейса, см. Жизненный цикл ViewModel.
Получение данных
Теперь, когда мы использовали LiveData для подключения UserProfileViewModel
к UserProfileFragment
, как мы можем получить данные профиля пользователя?
В этом примере мы предполагаем, что наш backend предоставляет REST API. Мы используем библиотеку Retrofit для доступа к нашему backend, хотя вы можете использовать другую библиотеку, которая служит той же цели.
Вот наше определение Webservice
, который связывается с нашим backend-ом:
interface Webservice {
/**
* @GET declares an HTTP GET request
* @Path("user") annotation on the userId parameter marks it as a
* replacement for the {user} placeholder in the @GET path
*/
@GET("/users/{user}")
fun getUser(@Path("user") userId: String): Call<User>
}
Первая идея для реализации ViewModel
может включать прямой вызов Webservice
для извлечения данных и назначения этих данных нашему объекту LiveData
. Этот дизайн работает, но с его использованием наше приложение становится все сложнее поддерживать по мере роста. Это дает слишком большую ответственность классу UserProfileViewModel
, что нарушает принцип разделения интересов. Кроме того, область действия ViewModel связана с жизненным циклом Activity или Fragment, что означает, что данные из Webservice
теряются, когда заканчивается жизненный цикл связанного объекта пользовательского интерфейса. Такое поведение создает нежелательный пользовательский опыт.
Вместо этого наша ViewModel
делегирует процесс извлечения данных новому модулю, хранилищу.
Модули репозитория обрабатывают операции с данными. Они предоставляют чистый API, так что остальная часть приложения может легко получить эти данные. Они знают, откуда взять данные и какие вызовы API следует выполнять при обновлении данных. Вы можете рассматривать репозитории как посредники между различными источниками данных, такими как постоянные модели, веб-службы и кэши.
Наш класс UserRepository
, показанный в следующем фрагменте кода, использует экземпляр WebService
для извлечения данных пользователя:
class UserRepository {
private val webservice: Webservice = TODO()
// ...
fun getUser(userId: String): LiveData<User> {
// Это не оптимальная реализация. Мы исправим это позже.
val data = MutableLiveData<User>()
webservice.getUser(userId).enqueue(object : Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
data.value = response.body()
}
// Случай ошибки опущен для краткости.
override fun onFailure(call: Call<User>, t: Throwable) {
TODO()
}
})
return data
}
}
Хотя модуль хранилища выглядит ненужным, он служит важной цели: он абстрагирует источники данных от остальной части приложения. Теперь наш UserProfileViewModel
не знает, как извлекаются данные, поэтому мы можем предоставить модели представления данные, полученные из нескольких различных реализаций извлечения данных.
Примечание. Мы упустили случай сетевых ошибок для простоты. Для альтернативной реализации, которая выставляет ошибки и статус загрузки, см. Приложение: раскрытие статуса сети.
Управление зависимостями между компонентами
Классу UserRepository
выше необходим экземпляр Webservice
для извлечения данных пользователя. Он мог бы просто создать экземпляр, но для этого ему также необходимо знать зависимости класса Webservice
. Кроме того, UserRepository
, вероятно, не единственный класс, которому нужен веб-сервис. Эта ситуация требует от нас дублирования кода, поскольку каждый класс, которому нужна ссылка на Webservice
, должен знать, как его создать и его зависимости. Если каждый класс создает новый WebService
, наше приложение может стать очень ресурсоемким.
Для решения этой проблемы вы можете использовать следующие шаблоны проектирования:
- Внедрение зависимостей (DI). Внедрение зависимостей позволяет классам определять свои зависимости, не создавая их. Во время выполнения, другой класс отвечает за предоставление этих зависимостей. Мы рекомендуем библиотеку Dagger 2 для реализации внедрения зависимостей в приложениях Android. Dagger 2 автоматически создает объекты, обходя дерево зависимостей, и обеспечивает гарантии времени компиляции для зависимостей.
- (Service location) Локатор службы: шаблон локатора службы предоставляет реестр, в котором классы могут получать свои зависимости вместо их построения.
Реализовать реестр служб проще, чем использовать DI, поэтому, если вы не знакомы с DI, вместо этого используйте шаблон: локация служб.
Эти шаблоны позволяют вам масштабировать ваш код, потому что они предоставляют четкие шаблоны для управления зависимостями без дублирования или усложнения кода. Кроме того, эти шаблоны позволяют быстро переключаться между тестовыми и производственными реализациями выборки данных.
В нашем примере приложения используется Dagger 2 для управления зависимостями объекта Webservice
.
Подключите ViewModel и хранилище
Теперь мы модифицируем наш UserProfileViewModel
для использования объекта UserRepository
:
class UserProfileViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
userRepository: UserRepository
) : ViewModel() {
val userId : String = savedStateHandle["uid"] ?:
throw IllegalArgumentException("missing user id")
val user : LiveData<User> = userRepository.getUser(userId)
}
Кеширование
Реализация UserRepository
абстрагирует вызов объекта Webservice
, но поскольку он опирается только на один источник данных, он не очень гибок.
Основная проблема с реализацией UserRepository
заключается в том, что после получения данных из нашего бэкэнда эти данные нигде не хранятся. Поэтому, если пользователь покидает UserProfileFragment
, а затем возвращается к нему, наше приложение должно повторно извлечь данные, даже если они не изменились.
Эта конструкция является неоптимальной по следующим причинам:
- Это тратит ценные ресурсы трафика.
- Это заставляет пользователя ожидать завершения нового запроса.
Чтобы устранить эти недостатки, мы добавляем новый источник данных в наш UserRepository
, который кэширует объекты User
в памяти:
//Информируем Dagger, что этот класс должен быть создан только единожды.
@Singleton
class UserRepository @Inject constructor(
private val webservice: Webservice,
// Простой кэш в памяти. Детали опущены для краткости.
private val userCache: UserCache
) {
fun getUser(userId: String): LiveData<User> {
val cached = userCache.get(userId)
if (cached != null) {
return cached
}
val data = MutableLiveData<User>()
userCache.put(userId, data)
// Эта реализация все еще неоптимальная, но лучше, чем раньше.
// Полная реализация также обрабатывает случаи ошибок.
webservice.getUser(userId).enqueue(object : Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
data.value = response.body()
}
// Случай ошибки опущен для краткости.
override fun onFailure(call: Call<User>, t: Throwable) {
TODO()
}
})
return data
}
}
Постоянные данные
Используя нашу текущую реализацию, если пользователь поворачивает устройство или уходит и немедленно возвращается в приложение, существующий пользовательский интерфейс становится видимым мгновенно, потому что хранилище извлекает данные из нашего кеша в памяти.
Тем не менее, что произойдет, если пользователь покинет приложение и вернется через несколько часов после того, как ОС Android завершит процесс? Полагаясь на нашу текущую реализацию в этой ситуации, нам нужно снова получить данные из сети. Этот процесс обновления не просто плохой пользовательский опыт; это также расточительно, потому что он потребляет ценные мобильные данные.
Вы можете решить эту проблему, кэшируя веб-запросы, но это создает ключевую новую проблему: что произойдет, если те же пользовательские данные будут отображены в запросе другого типа, например при получении списка друзей? Приложение будет отображать противоречивые данные, что в лучшем случае сбивает с толку. Например, наше приложение может отображать две разные версии данных одного и того же пользователя, если пользователь отправлял запрос списка друзей и однопользовательский запрос в разное время. Наше приложение должно было бы выяснить, как объединить эти противоречивые данные.
Правильный способ справиться с этой ситуацией — использовать постоянную модель. Нам на помощь приходит библиотека сохранения постоянных данных (БД) Room.
Room — это библиотека объектно-реляционного отображения (object-mapping), которая обеспечивает локальное сохранение данных с минимальным стандартным кодом. Во время компиляции он проверяет каждый запрос на соответствие вашей схеме данных, поэтому неработающие запросы SQL приводят к ошибкам во время компиляции, а не к сбоям во время выполнения. Room абстрагируется от некоторых базовых деталей реализации работы с необработанными таблицами SQL и запросами. Это также позволяет вам наблюдать за изменениями в данных БД, включая коллекции и запросы на соединение, выставляя такие изменения с помощью объектов LiveData. Он даже явно определяет ограничения выполнения, которые решают общие проблемы с потоками, такие как доступ к хранилищу в основном потоке.
Примечание. Если ваше приложение уже использует другое решение, такое как объектно-реляционное отображение SQLite (ORM), вам не нужно заменять существующее решение на Room. Однако, если вы пишете новое приложение или реорганизуете существующее приложение, мы рекомендуем использовать Room для сохранения данных вашего приложения. Таким образом, вы можете воспользоваться возможностями абстракции библиотеки и проверки запросов.
Чтобы использовать Room, нам нужно определить нашу локальную схему. Сначала мы добавляем аннотацию @Entity
в наш класс модели данных User
и аннотацию @PrimaryKey
в поле id
класса. Эти аннотации помечают User
как таблицу в нашей базе данных, а id
— как первичный ключ таблицы:
@Entity
data class User(
@PrimaryKey private val id: String,
private val name: String,
private val lastName: String
)
Затем мы создаем класс базы данных, реализуя RoomDatabase
для нашего приложения:
@Database(entities = [User::class], version = 1)
abstract class UserDatabase : RoomDatabase()
Обратите внимание, что UserDatabase
является абстрактной. Библиотека Room автоматически обеспечивает реализацию этого. Подробности смотрите в документации по Room.
Теперь нам нужен способ вставки пользовательских данных в базу данных. Для этой задачи мы создаем объект доступа к данным (DAO).
@Dao
interface UserDao {
@Insert(onConflict = REPLACE)
fun save(user: User)
@Query("SELECT * FROM user WHERE id = :userId")
fun load(userId: String): LiveData<User>
}
Обратите внимание, что метод load
возвращает объект типа LiveData. Room знает, когда база данных изменена, и автоматически уведомляет всех активных наблюдателей об изменении данных. Поскольку Room использует LiveData, эта операция эффективна; он обновляет данные только при наличии хотя бы одного активного наблюдателя.
Примечание: Room проверяет недействительность на основе модификаций таблицы, что означает, что она может отправлять ложные положительные уведомления.
Определив наш класс UserDao
, мы затем ссылаемся на DAO из нашего класса базы данных:
@Database(entities = [User::class], version = 1)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Теперь мы можем изменить наш UserRepository
, чтобы включить источник данных Room:
// Информирует Dagger, что этот класс должен быть создан только один раз.
@Singleton
class UserRepository @Inject constructor(
private val webservice: Webservice,
// Простой кэш в памяти. Детали опущены для краткости.
private val executor: Executor,
private val userDao: UserDao
) {
fun getUser(userId: String): LiveData<User> {
refreshUser(userId)
// Возвращает объект LiveData непосредственно из базы данных.
return userDao.load(userId)
}
private fun refreshUser(userId: String) {
// Работает в фоновом потоке.
executor.execute {
// Проверьте, если пользовательские данные были получены недавно.
val userExists = userDao.hasUser(FRESH_TIMEOUT)
if (!userExists) {
// Обновляем данные.
val response = webservice.getUser(userId).execute()
// Проверьте на ошибки здесь.
// Обновляем базу данных. Объект LiveData автоматически обновляется,
// поэтому нам здесь больше ничего не нужно делать.
userDao.save(response.body()!!)
}
}
}
companion object {
val FRESH_TIMEOUT = TimeUnit.DAYS.toMillis(1)
}
}
Обратите внимание, что даже если мы изменили источник данных в UserRepository
, нам не нужно было менять наш UserProfileViewModel
или UserProfileFragment
. Это небольшое обновление демонстрирует гибкость, которую обеспечивает архитектура нашего приложения. Он также отлично подходит для тестирования, потому что мы можем предоставить поддельный UserRepository
и одновременно протестировать нашу производственную UserProfileViewModel
.
Если пользователи вернутся через несколько дней, то приложение использующее эту архитектуру, вполне вероятно, покажет устаревшую информацию, пока хранилище не получит обновленную информацию. В зависимости от вашего варианта использования вы можете не отображать устаревшую информацию. Вместо этого вы можете отобразить данные-заполнители (placeholder data), которые показывают фиктивные значения и указывают, что ваше приложение в настоящее время загружает и загружает актуальную информацию.
Единственный источник правды
Обычно разные конечные точки REST API возвращают одни и те же данные. Например, если у нашего бэкэнда есть другая конечная точка, которая возвращает список друзей, один и тот же пользовательский объект может исходить из двух разных конечных точек API, возможно, даже с использованием разных уровней детализации. Если бы UserRepository
возвращал ответ от запроса Webservice
как есть, без проверки согласованности, наши пользовательские интерфейсы могли бы показывать запутанную информацию, потому что версия и формат данных из хранилища зависели бы от последней вызванной конечной точки.
По этой причине наша реализация UserRepository
сохраняет ответы веб-служб в базе данных. Изменения в базе данных затем вызывают обратные вызовы для активных объектов LiveData. Используя эту модель, база данных служит единственным источником правды, и другие части приложения получают к ней доступ через наш UserRepository
. Независимо от того, используете ли вы дисковый кэш, мы рекомендуем, чтобы ваш репозиторий определял источник данных как единственный источник правды для остальной части вашего приложения.
Показывать прогресс операции
В некоторых случаях использования, таких как pull-to-refresh, важно, чтобы пользовательский интерфейс показывал пользователю, что в данный момент выполняется сетевая операция. Рекомендуется отделять действие пользовательского интерфейса от фактических данных, поскольку данные могут обновляться по разным причинам. Например, если мы получили список друзей, тот же пользователь может быть снова выбран программным образом, что приведет к обновлению LiveData. С точки зрения пользовательского интерфейса, факт наличия запроса в полете — это просто еще одна точка данных, аналогичная любой другой части данных в самом объекте User
.
Мы можем использовать одну из следующих стратегий для отображения согласованного статуса обновления данных в пользовательском интерфейсе независимо от того, откуда поступил запрос на обновление данных:
- Измените
getUser ()
, чтобы он возвращал объект типаLiveData
. Этот объект будет включать в себя статус работы сети. Для примера, смотрите реализацию NetworkBoundResource в проекте GitHub android-Architecture-components. - Предоставьте другую общедоступную функцию в классе
UserRepository
, которая может возвращать состояние обновления пользователя. Этот вариант лучше использовать, если вы хотите отображать состояние сети в вашем пользовательском интерфейсе только в том случае, если процесс извлечения данных возник из явного действия пользователя, такого как pull-to-refresh.
Протестируйте каждый компонент
В разделе о разделении интересов мы упомянули, что одним из ключевых преимуществ следования этому принципу является тестируемость.
В следующем списке показано, как протестировать каждый модуль кода из нашего расширенного примера:
- Пользовательский интерфейс и взаимодействие: используйте инструментарий Android UI тест. Лучший способ создать этот тест — использовать библиотеку Espresso. Вы можете создать фрагмент и предоставить ему макет
UserProfileViewModel
. Поскольку фрагмент связывается только сUserProfileViewModel
, мокирование (имитация) только этого класса достаточна для полного тестирования пользовательского интерфейса вашего приложения. - ViewModel: вы можете протестировать класс
UserProfileViewModel
с помощью теста JUnit. Вам нужно только смоделировать один класс,UserRepository
. - UserRepository: вы также можете протестировать
UserRepository
с помощью теста JUnit. Вам нужно испытыватьWebservice
иUserDao
. В этих тестах проверьте следующее поведение:- Хранилище делает правильные вызовы веб-службы.
- Репозиторий сохраняет результаты в базе данных.
- Хранилище не делает ненужных запросов, если данные кэшируются и обновляются.
- Поскольку и
Webservice
, иUserDao
являются интерфейсами, вы можете имитировать их или создавать поддельные реализации для более сложных тестовых случаев. - UserDao: тестируйте классы DAO с помощью инструментальных тестов. Поскольку эти инструментальные тесты не требуют каких-либо компонентов пользовательского интерфейса, они выполняются быстро. Для каждого теста создайте базу данных в памяти, чтобы убедиться, что у теста нет побочных эффектов, таких как изменение файлов базы данных на диске…
Внимание: Room позволяет указать реализацию базы данных, поэтому можно протестировать DAO, предоставив реализацию JSQL для SupportSQLiteOpenHelper. Однако такой подход не рекомендуется, поскольку работающая на устройстве версия SQLite может отличаться от версии SQLite на компьютере разработчика.
- Веб-сервис: в этих тестах избегайте сетевых вызовов на ваш сервер. Для всех тестов, особенно веб-, важно быть независимым от внешнего мира. Несколько библиотек, включая MockWebServer, могут помочь вам создать поддельный локальный сервер для этих тестов.
- Тестирование артефактов: Компоненты архитектуры предоставляют артефакт maven для управления фоновыми потоками. Артефакт тестирования ядра
androidx.arch.core
: содержит следующие правила JUnit:InstantTaskExecutorRule:
Используйте это правило для мгновенного выполнения любой фоновой операции в вызывающем потоке.CountingTaskExecutorRule:
Используйте это правило для ожидания фоновых операций компонентов архитектуры. Вы также можете связать это правило с Espresso в качестве ресурса в режиме ожидания.
Лучшие практики
Программирование — это творческое поле, и создание приложений для Android не является исключением. Существует много способов решения проблемы, будь то передача данных между несколькими действиями или фрагментами, извлечение удаленных данных и их локальное сохранение в автономном режиме, или любое количество других распространенных сценариев, с которыми сталкиваются нетривиальные приложения.
Хотя следующие рекомендации не являются обязательными, наш опыт показывает, что их выполнение делает вашу кодовую базу более надежной, тестируемой и поддерживаемой в долгосрочной перспективе:
Избегайте обозначения точек входа вашего приложения — таких как действия, службы и широковещательные приемники — в качестве источников данных.
Вместо этого они должны координировать свои действия только с другими компонентами, чтобы получить подмножество данных, относящихся к этой точке входа. Каждый компонент приложения довольно недолговечен, в зависимости от взаимодействия пользователя с его устройством и общего текущего состояния системы.
Создайте четкие границы ответственности между различными модулями вашего приложения.
Например, не распространяйте код, который загружает данные из сети, по нескольким классам или пакетам в вашей кодовой базе. Точно так же не определяйте множественные несвязанные обязанности — такие как кэширование данных и связывание данных — в одном классе.
Выставляйте как можно меньше от каждого модуля.
Не поддавайтесь соблазну создать ярлык «всего один», который раскрывает детали внутренней реализации из одного модуля. Вы можете выиграть немного времени в краткосрочной перспективе, но затем вы будете нести технический долг много раз по мере развития вашей кодовой базы.
Подумайте, как сделать каждый модуль тестируемым изолированно.
Например, наличие четко определенного API для извлечения данных из сети облегчает тестирование модуля, который сохраняет эти данные в локальной базе данных. Если вместо этого вы смешиваете логику этих двух модулей в одном месте или распределяете свой сетевой код по всей базе кода, тестирование становится намного сложнее — в некоторых случаях даже не невозможным.
Сосредоточьтесь на уникальном ядре вашего приложения, чтобы оно выделялось среди других приложений.
Не изобретайте велосипед заново, снова и снова записывая один и тот же шаблон. Вместо этого сосредоточьте свое время и энергию на том, что делает ваше приложение уникальным, и позвольте компонентам архитектуры Android и другим рекомендуемым библиотекам справиться с повторяющимся образцом.
Сохраняйте как можно больше актуальных и свежих данных.
Таким образом, пользователи могут наслаждаться функциональностью вашего приложения, даже если их устройство находится в автономном режиме. Помните, что не все ваши пользователи пользуются постоянным высокоскоростным подключением.
Назначьте один источник данных единственным источником истинны.
Всякий раз, когда вашему приложению требуется доступ к этому фрагменту данных, оно всегда должно происходить из этого единственного источника истины.
Дополнение: раскрытие статуса сети
В приведенном выше разделе рекомендуемой архитектуры приложения мы пропустили сетевые ошибки и состояния загрузки для упрощения фрагментов кода.
В этом разделе показано, как отобразить состояние сети с помощью класса Resource, который инкапсулирует как данные, так и их состояние.
Следующий фрагмент кода предоставляет пример реализации Resource:
// Общий класс, который содержит данные и статус о загрузке этих данных.
sealed class Resource<T>(
val data: T? = null,
val message: String? = null
) {
class Success<T>(data: T) : Resource<T>(data)
class Loading<T>(data: T? = null) : Resource<T>(data)
class Error<T>(message: String, data: T? = null) : Resource<T>(data, message)
}
Поскольку загрузка данных из сети при отображении копии этих данных является обычной практикой, полезно создать вспомогательный класс, который можно повторно использовать в нескольких местах. Для этого примера мы создаем класс с именем NetworkBoundResource
.
На следующей диаграмме показано дерево решений для NetworkBoundResource
:
Он начинается с наблюдения за базой данных для ресурса. Когда запись загружается из базы данных в первый раз, NetworkBoundResource
проверяет, является ли результат достаточно хорошим, чтобы его можно было отправить, или его нужно получить из сети заново. Обратите внимание, что обе эти ситуации могут возникать одновременно, учитывая, что вы, вероятно, хотите показывать кэшированные данные при обновлении их из сети.
Если сетевой вызов завершается успешно, он сохраняет ответ в базе данных и повторно инициализирует поток. В случае сбоя сетевого запроса NetworkBoundResource
отправляет сбой напрямую.
Примечание. После сохранения новых данных на диск мы повторно инициализируем поток из базы данных. Однако обычно нам не нужно этого делать, потому что сама база данных отправляет изменения.
Имейте в виду, что полагаться на базу данных для отправки изменений включает в себя использование связанных побочных эффектов, что не очень хорошо, потому что неопределенное поведение этих побочных эффектов может произойти, если база данных не отправит изменения, потому что данные не изменились.
Кроме того, не отправляйте результаты, полученные из сети, поскольку это нарушит принцип единого источника истины. В конце концов, возможно, база данных содержит триггеры, которые изменяют значения данных во время операции сохранения. Точно так же не отправляйте `SUCCESS` без новых данных, потому что тогда клиент получит неверную версию данных.
В следующем фрагменте кода показан открытый API, предоставленный классом NetworkBoundResource
для его подклассов:
// ResultType: Введите данные ресурса.
// RequestType: Введите ответ API.
abstract class NetworkBoundResource<ResultType, RequestType> {
// Вызывается для сохранения результата ответа API в базу данных.
@WorkerThread
protected abstract fun saveCallResult(item: RequestType)
// Вызывается с данными в базе данных, чтобы решить, следует ли извлекать
// потенциально обновленные данные из сети.
@MainThread
protected abstract fun shouldFetch(data: ResultType?): Boolean
// Вызывается для получения кэшированных данных из базы данных.
@MainThread
protected abstract fun loadFromDb(): LiveData<ResultType>
// Вызывается для создания вызова API.
@MainThread
protected abstract fun createCall(): LiveData<ApiResponse<RequestType>>
// Вызывается, когда получение не удается. Дочерний класс
// может захотеть сбросить компоненты, такие как ограничитель скорости.
protected open fun onFetchFailed() {}
// Возвращает объект LiveData, представляющий ресурс,
// реализованный в базовом классе.
fun asLiveData(): LiveData<ResultType> = TODO()
}
Обратите внимание на следующие важные детали определения класса:
- Он определяет два параметра типа,
ResultType
иRequestType
, поскольку тип данных, возвращаемый из API, может не соответствовать типу данных, используемому локально. - Он использует класс
ApiResponse
для сетевых запросов.ApiResponse
— это простая оболочка для классаRetrofit2.Call
, которая преобразует ответы в экземплярыLiveData
.
Полная реализация класса NetworkBoundResource
появляется как часть проекта GitHub android-Architecture-components.
После создания NetworkBoundResource
мы можем использовать его для записи наших привязанных к диску и сети реализаций User
в классе UserRepository
:
// Информирует Dagger2, что этот класс должен быть создан только один раз.
@Singleton
class UserRepository @Inject constructor(
private val webservice: Webservice,
private val userDao: UserDao
) {
fun getUser(userId: String): LiveData<User> {
return object : NetworkBoundResource<User, User>() {
override fun saveCallResult(item: User) {
userDao.save(item)
}
override fun shouldFetch(data: User?): Boolean {
return rateLimiter.canFetch(userId) && (data == null || !isFresh(data))
}
override fun loadFromDb(): LiveData<User> {
return userDao.load(userId)
}
override fun createCall(): LiveData<ApiResponse<User>> {
return webservice.getUser(userId)
}
}.asLiveData()
}
}
Этот туториал содержит информацию по разработке приложений на Android для совсем начинающих.
Изучение разработки приложений на Android может показаться сложным, но открывает целый мир возможностей. Ведь возможно вы сможете создать «хитовое» приложение, которое изменит то, как мы работаем или взаимодействуем друг с другом. Может быть, вы разработаете инструмент, которым поможет вам улучшить ваш собственный рабочий процесс. Или, возможно, вы просто приобретете новый навык и получите отличную работу!
В любом случае, изучение разработки приложений на Android может оказаться не таким сложным, как вы думаете, если понимать, как все это работает, и иметь путеводитель, который поможет вам в этом. Этот туториал — тот самый путеводитель!
Шаг 1. Скачайте инструменты, необходимые для разработки приложений на Android.
Во-первых, вам нужно создать среду разработки, чтобы ваш десктоп был готов поддерживать ваши цели Android-разработки. Для этого вам понадобятся Android Studio и Android SDK. Удобно, что оба упакованы вместе в одной загрузке, которую вы можете найти здесь.
Android Studio — это IDE. Что означает “integrated development environment” (интегрированная среда разработки), которая, по сути, представляет собой интерфейс, в который вы можете ввести свой код (в первую очередь, Java или Kotlin) и получить доступ ко всем инструментам, необходимым для разработки. Android Studio позволяет получать доступ к библиотекам и API из Android SDK, тем самым предоставляя вам доступ к собственным функциям операционной системы. Вы также сможете встроить приложение в APK с помощью Gradle, протестировать его через «виртуальное устройство» (эмулятор) и отладить код во время работы.
С учетом всего вышесказанного имейте в виду, что существуют и другие варианты разработки вашего приложения на Android. Например, Unity — очень мощный инструмент для разработки кроссплатформенных игр, который также поддерживает Android. Есть еще Visual Studio с Xamarin — отличное сочетание для создания кроссплатформенных приложений на C#.
Для того чтобы начать, Android Studio является лучшим местом (за исключением разработки игр для Android), так как предоставляет все дополнительные инструменты и ресурсы в одном месте.
К счастью, настройка очень проста, и вам нужно только следовать инструкциям.
Шаг 2. Создайте новый проект
После того, как вы установили Android Studio, следующим шагом будет создание нового проекта. Это простой процесс, но вам нужно будет принять решения, влияющие на дальнейшую разработку приложения на Android.
Перейдите в File> New> New Project. Теперь вам будет предложено выбрать Project Template (шаблон проекта). Этот шаг определяет код и элементы пользовательского интерфейса, которые будут включены в ваше новое приложение при его загрузке.
Activity (активити) относится к screen (экрану) в вашем приложении. То есть, проект с No Activity будет полностью пустым, за исключением базовой файловой структуры. Basic Activity же создаст стартовый экран для вашего приложения, добавит кнопку внизу и гамбургер-меню вверху. Это общие элементы во многих приложениях на Android, так что это поможет сэкономить вам время.
Тем не менее, когда вы только начинаете заниматься разработкой, это может усложнить ситуацию, По этой причине мы выберем No Activity. Этим мы создаем активити и несколько файлов, но не добавляем много дополнительного кода.
Выберите имя и package name вашего нового приложения. Имя — это то, что увидит ваша аудитория, когда приложение будет установлено на их устройство. Рackage name — это внутренняя ссылка, используемая Android, чтобы отличать его от других приложений. Она должен быть составлена с использованием вашего домена верхнего уровня (например, .com), имени домена и имени приложения.
Например: com.androidauthority.sampleapp.
Если у вас нет домена или компании, просто используйте com, а затем укажите что-нибудь, что вам нравится!
Вам также нужно будет решить, где вы хотите сохранить файлы и на каком языке вы собираетесь писать код: Java или Kotlin.
Сравниваем Java и Kotlin в разработке приложений на Android
Одно из важнейших решений, которое вам, как разработчику Android, придется принять, — это изучать Kotlin или Java. Оба языка официально поддерживаются Google и Android Studio, но между ними есть некоторые отличия.
Java поддерживается Google дольше. Java — это язык, который разработчики использовали для создания приложений на Android в течение многих лет. Java также является одним из самых востребованных языков программирования в мире. Будучи старейшим языком программирования на Android, Java имеет немного больше поддержки, чем Kotlin.
Kotlin, с другой стороны, стал предпочтительным выбором Google для разработки под Android. Мы по умолчанию выберем этот язык при создании нового приложения, которое, вероятно, станет более распространенным в будущем. С Kotlin также значительно легче разобраться, если вы полный новичок.
По этим причинам Kotlin, вероятно, является предпочтительным языком для разработчиков на Android, которые учатся для развлечения или не стремятся разрабатывать для других платформ. Но если вы хотите стать профессиональным разработчиком, то изучать Java тоже имеет смысл.
Минимальный SDK
Наконец, вам также необходимо учитывать свой минимальный SDK. Это самая низкая версия Android, которую вы хотите, чтобы ваше приложение поддерживало.
Чем более старую версию Android вы укажете, тем шире будет ваша потенциальная аудитория. Имейте в виду, что скорость перехода на последние версии Android относительно низкая, поэтому использование последнего обновления не позволит многим пользователям потестировать то, что вы создали.
Однако вы сможете получить доступ к последним функциям Android только в том случае, если нацелены на более новую версию. Если вам нравится звук пузырей в чате, вы нужно использовать самую последнюю версию.
Шаг 3. Ознакомьтесь с файлами
Я помню, как впервые попробовал разрабатывать приложения для Android. Я загрузил Android Studio и сразу же был сбит с толку увиденным. Есть так много разных файлов, несколько типов кода, папок и многого другого! Это было далеко от единственного пустого файла, с которым я привык работать в Python или даже QBasic (кто-нибудь помнит QBasic??).Выглядеть это может довольно сложно, но вот что вам нужно знать.
Открытый файл — это MainActivity.java или MainActivity.kt. Это основной файл логики для активити, которое будет определять поведение вашего приложения. Посмотрите налево, и вы увидите, что этот файл находится в: MyApplication> app> src> main> java> com> companyname> myapplication.
Используемые папки важны для разработки приложений на Android, поскольку они помогают Android Studio и Gradle все найти и правильно построить (подробнее о Gradle чуть позже). Переименовать их как вам захочется вы не можете!
Вы заметите, что на главной странице уже есть код. Это то, что мы называем «шаблонным кодом», что означает, что это код, который практически идентичен для разных проектов приложений и необходим для работы основных функций. Шаблонный код — это то, что вы будете вводить снова и снова! Одним из преимуществ Kotlin является то, что он требует меньше шаблонов, а это означает, что у вас будет меньше кода на экране.
Файлы layout
Задача этого кода сообщить Android, где находится связанный файл layout. Файл layout немного отличается от файла Kotlin/Java. Это определяет способ того, как будет выглядит активити, и позволяет вам добавлять такие вещи, как кнопки, текст и окна браузера.
Вы найдете этот файл в: MyApplication> app> src> res> layout.
Он будет называться activity_main.xml. Обратите внимание, что файлы, хранящиеся в папке с ресурсами, не могут использовать заглавные буквы; им нужно использовать символ подчеркивания, чтобы разделить слова между собой. Дважды щелкните этот файл, и он откроется в главном окне, где вы редактируете свой код. Обратите внимание, что вы можете переключаться между открытыми файлами, используя вкладки вверху.
Вы можете просмотреть этот файл через вью Code, Design или вариант раздельный, в котором эти окна отображаются рядом друг с другом. В правом верхнем углу есть кнопки для переключения режима.
В варианте «Design» вы можете перетаскивать различные виджеты на экран. В варианте Code отображается загрузка XML-сценария. Когда вы добавляете новые виджеты через Design, этот скрипт обновляется. Точно так же вы можете настроить здесь свойства виджетов (называемых «вьюхами») и увидеть их отражение в режиме реального времени через вью Code.
В подавляющем большинстве приложений вам нужно будет создавать новый файл Java/Kotlin и соответствующий файл XML каждый раз, когда вам потребуется новое активити. И для тех, кто задавался вопросом: да, это означает, что вам нужно изучить либо Kotlin, либо Java и XML. Это может показаться головной болью, но на самом деле это упрощает процесс в долгосрочной перспективе.
Остальные файлы и папки
Однако здесь гораздо больше файлов и папок, так что же они все делают?
По правде говоря, вам не нужно знать, что здесь есть. Но есть кое-что, о чем полезно знать:
Android Manifest: это XML-файл в папке res, который определяет важные функции вашего приложения. Включает ориентацию приложения, действия, которые вы хотите включить в него, версию и т.д.
Drawable: эта папка находится в res. Сюда вы будете помещать такие вещи, как изображения, на которые хотите ссылаться позже.
Values: эта папка ресурсов — полезное место для хранения значений, которые будут использоваться глобально в вашем приложении. Например, это могут быть цветовые коды (упрощающие изменение внешнего вида всего приложения). Вы определите эти значения в отдельных файлах XML, например в colors.xml.
Gradle: Gradle — это инструмент, который собирает все ваши файлы и объединяет их в рабочий APK для тестирования. Он также полезен для создания превью и т.д. Вам не нужно беспокоиться о файлах, находящихся здесь, но если вы хотите добавить зависимости, вы это сделаете именно здесь. Зависимости — это внешние библиотеки, которые позволяют вам получить доступ к дополнительным функциям из вашего собственного кода.
Шаг 4. Протестируйте свое приложение
Первое, что вы должны сделать, знакомясь с любым новым языком программирования, — это создать приложение с надписью Hello World. К счастью, в данном случае это очень просто, так как находящийся здесь код именно это и делает! Если вы посмотрите на XML, то увидите, что он включает маленький ярлык, который просто говорит: Hello World!
Если вы посмотрите на элементы управления вверху, вы увидите небольшую зеленую стрелку воспроизведения. Слева от нее находится раскрывающееся меню с именем телефона. Когда вы установили Android Studio, он также должен был установить Android system image вместе с Virtual Device Manager. Другими словами, у вас уже должен быть установлен и готов к работе эмулятор Android! Нажав на эту зеленую стрелку, вы сможете запустить и протестировать свое приложение! Обратите внимание, что вы также сможете использовать симулятор телефона, как если бы это было настоящее устройство.
Вы можете изменить настройки своего виртуального устройства, такие как размер экрана, версию Android, пространство и т.д., перейдя в Tools > AVD Manager. Там же вы можете скачать новые системные изображения. Убедитесь, что ваше виртуальное устройство соответствует минимальному пакету SDK, установленному вами в начале, или превышает его.
Кроме того, вы можете попробовать подключить к компьютеру физическое устройство и использовать его для тестирования нового приложения. Однако вам нужно включить Developer Options (параметры разработчика) и включить USB Debugging (отладку ошибок).
Шаг 5: Действуйте!
Лучший способ научиться разрабатывать приложения для Android — это действовать! Это означает, что вы должны попытаться отредактировать код перед вами, чтобы увидеть, сможете ли вы заставить его сделать что-то новое.
Изменить отображаемое сообщение так же просто, как зайти в свой XML и изменить строку с надписью «Hello World!» в «Howdy World!«
Но что, если вы хотите добавить в свое творение какой-то интерактивный элемент? В этом случае вы можете разрешить пользователю щелкнуть на кнопку, чтобы изменить текст.
Во-первых, вам нужно поместить эту строку в тег TextView в файле activity_main.xml: