РАЗРАБОТКА3 технологии Android-разработки, от которых начнут отказываться в 2022 году
https://apptractor.ru/info/articles/3-tehnologii-android-razrabotki-ot-kotoryh-nachnut-otkazyvatsya-v-2022-godu.html
@android_its
https://apptractor.ru/info/articles/3-tehnologii-android-razrabotki-ot-kotoryh-nachnut-otkazyvatsya-v-2022-godu.html
@android_its
AppTractor
3 технологии Android-разработки, от которых начнут отказываться в 2022 году
Если вы новичок в Android, хорошо знать, что это такое, и иметь возможность использовать их по мере необходимости, но в будущем основное внимание должно быть уделено более новым способам разработки.
👍2🔥1
Утилита для работы с несколькими слоями Google Maps Multilayer Utility
https://developers.google.com/maps/documentation/android-sdk/utility/multilayer?hl=ru
@android_its
https://developers.google.com/maps/documentation/android-sdk/utility/multilayer?hl=ru
@android_its
Google for Developers
Утилита Google Maps Multilayer | Maps SDK for Android | Google for Developers
Распространенные Паттерны Проектирования И Архитектуры Приложений На Android
https://swiftbook.ru/post/tutorials/common-design-patterns-and-app-architectures-for-android/
@android_its
https://swiftbook.ru/post/tutorials/common-design-patterns-and-app-architectures-for-android/
@android_its
❤2
Добавление слоя изображений на карту (пакет SDK для Android)
https://docs.microsoft.com/ru-ru/azure/azure-maps/map-add-image-layer-android
@android_its
https://docs.microsoft.com/ru-ru/azure/azure-maps/map-add-image-layer-android
@android_its
Docs
Добавление слоя изображения на карту Android
Сведения о том, как добавлять изображения на карту. Сведения об использовании пакета SDK Azure Maps для Android для настройки слоев изображений и наложения изображений на фиксированные наборы координат.
👍3
Из каких базовых компонент состоит приложение?
Базовые компоненты андроид приложения: Activity, Service, BroadcastReceiver, ContentProvider. Каждый из базовых компонент объявляется в андроид манифесте и может являться точкой входа в приложение.
Activity представляет UI и функциональность, видимые пользователю.
Service используется для исполнения долгих операций, которые не требуют взаимодействия с пользователем.
BroadcastReceiver принимает и обрабатывает броадкаст ивенты, отправленные внутри приложения или из других приложений.
ContentProvider используется для обмена данными с другими приложениями.
Каждый из компонентов подробнее рассмотрим в будущем.
#Components
@android_its
Базовые компоненты андроид приложения: Activity, Service, BroadcastReceiver, ContentProvider. Каждый из базовых компонент объявляется в андроид манифесте и может являться точкой входа в приложение.
Activity представляет UI и функциональность, видимые пользователю.
Service используется для исполнения долгих операций, которые не требуют взаимодействия с пользователем.
BroadcastReceiver принимает и обрабатывает броадкаст ивенты, отправленные внутри приложения или из других приложений.
ContentProvider используется для обмена данными с другими приложениями.
Каждый из компонентов подробнее рассмотрим в будущем.
#Components
@android_its
👍5
Может ли приложение быть запущено в нескольких процессах?
Короткий ответ – Да.
Но для начала давайте разберемся чем процесс отличается от потока.
Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.
Поток – это сущность на уровне Runtime Environment.
Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).
Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов
Важно: При старте нового процесса создается инстанс приложения и снова вызывается
Подробнее про процессы и треды читайте в документации.
#System
Короткий ответ – Да.
Но для начала давайте разберемся чем процесс отличается от потока.
Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.
Поток – это сущность на уровне Runtime Environment.
Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).
Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов
<activity>, <service>, <receiver>, <provider> может иметь поле android:process=”<name>” в андроид манифесте. Кастомное значение этого поля явно говорит системе в каком процессе будет работать компонент.Важно: При старте нового процесса создается инстанс приложения и снова вызывается
Application.onCreate(). Если в этом методе вы инициализируете модули или библиотеки, которые используются только в главном процессе, то не забывайте проверять, в каком процессе вы находитесь в момент инициализации.Подробнее про процессы и треды читайте в документации.
#System
Wikipedia
Process (computing)
particular execution of a computer program
👍7
Приоритеты процессов
Процессы делятся по приоритету на 4 вида, в порядке убывания:
1. Видимый активный процесс (Foreground process). В этом процессе работает приложение, с которым взаимодействует пользователь. Процесс находится в этом состоянии в следующих случаях:
-
- Во время выполнения
- Запущен
2. Видимый процесс. Пользователь знает о приложении, запущенном в этом процессе, но не взаимодействует с ним:
-
-
-
3. Background Service. Процесс с сервисом, запущенным командой startService().
4. Закэшированный процесс. К ним относятся пустые процессы, используемые при старте приложений, и процессы, в которых все активити в
Система убивает процессы в порядке возрастания их приоритета для восстановления ресурсов. Подробнее
#Lifecycle
#System
@android_its
Процессы делятся по приоритету на 4 вида, в порядке убывания:
1. Видимый активный процесс (Foreground process). В этом процессе работает приложение, с которым взаимодействует пользователь. Процесс находится в этом состоянии в следующих случаях:
-
Activity, у которой вызван onResume(), но еще не вызван onPause()- Во время выполнения
BroadcastReceiver.onReceive()- Запущен
Service и выполняется один из колбэков: onCreate(), onStart(), onDestroy()2. Видимый процесс. Пользователь знает о приложении, запущенном в этом процессе, но не взаимодействует с ним:
-
Activity у которой вызван onPause(), но еще не вызван onStop().-
Service, который запущен через Service.startForeground(). В этом случае пользователь видит нотификацию, связанную с сервисом.-
Service, выполняющий функцию, о которой пользователь осведомлен. Например input method service.3. Background Service. Процесс с сервисом, запущенным командой startService().
4. Закэшированный процесс. К ним относятся пустые процессы, используемые при старте приложений, и процессы, в которых все активити в
onStop() состоянии.Система убивает процессы в порядке возрастания их приоритета для восстановления ресурсов. Подробнее
#Lifecycle
#System
@android_its
👍5👎1
Activity: Что такое и как запустить?
Activity – основной компонент в андроиде. Активити – это экран, то что видит и с чем взаимодействует пользователь. Может содержать несколько View и фрагментов. Так же как и другие базовые компоненты, может быть точкой входа в приложение.
Активити с MAIN Intent Filter в манифесте запускается при старте приложения, когда пользователь кликает на иконку приложения.
#Activity
#Components
@android_its
Activity – основной компонент в андроиде. Активити – это экран, то что видит и с чем взаимодействует пользователь. Может содержать несколько View и фрагментов. Так же как и другие базовые компоненты, может быть точкой входа в приложение.
Активити с MAIN Intent Filter в манифесте запускается при старте приложения, когда пользователь кликает на иконку приложения.
#Activity
#Components
@android_its
👍6
Activity: Жизненный цикл
Жизненный цикл активити состоит из шести основных коллбэков, вызываемых системой. В порядке вызова:
onCreate() вызывается когда активити создается. В
onStart() вызывается когда активити отрисована и видима пользователю.
onResume() вызывается перед тем как активити станет доступна для взаимодействия с пользователем.
onPause() – метод симметричный
onStop() – метод симметричный
onDestroy() – метод симметричный
Несколько примеров:
1. Пользователь жмет Home. В этом случае активити больше не видна, поэтому вызываются
2. Пользователь переходит на другую активити внутри приложения (реализуется вызовом
3. Вызов
4. Пользователь поворачивает телефон и ориентация активити меняется. Активити пересоздается и вызываются коллбеки
Это базовые методы активити. Более подробно они описаны в документации.
В полный жизненный цикл также входят
#Activity
#Lifecycle
Жизненный цикл активити состоит из шести основных коллбэков, вызываемых системой. В порядке вызова:
onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy().onCreate() вызывается когда активити создается. В
onCreate() вы должны вызвать метод setContentView().onStart() вызывается когда активити отрисована и видима пользователю.
onResume() вызывается перед тем как активити станет доступна для взаимодействия с пользователем.
onPause() – метод симметричный
onResume(). Пользователь больше не может взаимодействовать с активити, но активити частично видна пользователю. В этом состоянии UI активити может изменяться.onStop() – метод симметричный
onStart(). Вызывается, когда активити больше не видна пользователю.onDestroy() – метод симметричный
onCreate(). Вызывается перед тем, как активити будет уничтожена системой.Несколько примеров:
1. Пользователь жмет Home. В этом случае активити больше не видна, поэтому вызываются
onPause(), onStop(). Пользователь открывает приложение снова - onStart(), onResume().2. Пользователь переходит на другую активити внутри приложения (реализуется вызовом
startActivity()) – onPause(), onStop(). Пользователь возвращается на предыдущую активити – onStart(), onResume().3. Вызов
finish() – onPause(), onStop(), onDestroy(). Когда пользователь перейдет на эту активити снова, она будет создана с нуля без сохранения состояния.4. Пользователь поворачивает телефон и ориентация активити меняется. Активити пересоздается и вызываются коллбеки
onPause(), onStop(), onDestroy(), onCreate(), onStart(), onResume() с сохранением состояния.Это базовые методы активити. Более подробно они описаны в документации.
В полный жизненный цикл также входят
onRestart(), onSaveInstanceState(), onRestoreInstanceState(), onNewIntent() и другие методы, которые разберем в будущем.#Activity
#Lifecycle
👍10
Быстрый старт: гайд по автоматизированному тестированию для Android-разработчика. JVM
https://vc.ru/dev/199012-bystryy-start-gayd-po-avtomatizirovannomu-testirovaniyu-dlya-android-razrabotchika-jvm
@android_its
https://vc.ru/dev/199012-bystryy-start-gayd-po-avtomatizirovannomu-testirovaniyu-dlya-android-razrabotchika-jvm
@android_its
vc.ru
Быстрый старт: гайд по автоматизированному тестированию для Android-разработчика. JVM — Разработка на vc.ru
Привет! Меня зовут Сергей Иванов, я ведущий разработчик Android в Redmadrobot. С 2016 использую автотесты различных категорий и успел в этом набить немало шишек. Именно поэтому решил поделиться опытом. Возможно, что кому-то статья поможет систематизировать…
👍6
Activity: Как пережить поворот экрана?
При повороте экрана активити уничтожается и создается заново. Вызываются коллбэки
Чтобы сохранить состояние активити, вы должны переопределить метод onSaveInstanceState() и положить данные в Bundle.
При реинициализации активити,
Система вызывает
onSaveInstanceState() вызывается после
onRestoreInstanceState() вызывается после
#Activity
#Lifecycle
#State
@android_its
При повороте экрана активити уничтожается и создается заново. Вызываются коллбэки
onPause(), onStop(), onSaveInstanceState(), onDestroy() – onCreate(), onStart(), onRestoreInstanceState(), onResume().Чтобы сохранить состояние активити, вы должны переопределить метод onSaveInstanceState() и положить данные в Bundle.
При реинициализации активити,
Bundle с сохраненным состоянием передается в onCreate() и в onRestoreInstanceState().Система вызывает
onSaveInstanceState() и onRestoreInstanceState() только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки не вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish().onSaveInstanceState() вызывается после
onStop() на версии API ≥ 28. На API < 28 этот коллбэк вызывается перед onStop() и нет гарантий до или после onPause().onRestoreInstanceState() вызывается после
onStart().#Activity
#Lifecycle
#State
@android_its
👍8
Нужно ли думать о сохранении состояния, если приложение поддерживает только портретную ориентацию?
– Да.
Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы.
Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити.
#State
Fragment
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its - все о Android разработке
– Да.
Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы.
Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити.
#State
Fragment
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its - все о Android разработке
👍5🔥1
Termux - это эмулятор терминала Android и приложение среды Linux, написанный на Java.
Он работает напрямую без рутирования или настройки. Минимальная базовая система устанавливается автоматически - дополнительные пакеты доступны с помощью менеджера пакетов APT.
Termux-app - Пользовательский интерфейс и эмуляция терминала
Termux-api - Android API для использования командной строки и скриптов или программ
Termux-styling (Kotlin) - Дополнительное приложение для настройки шрифтов, терминала и цветовой схемы
Termux-tasker - Дополнительное приложение для интеграции с Tasker
Termux-packages (Shell) - Сборка системы и первичный набор пакетов для Termux
@android_its
Он работает напрямую без рутирования или настройки. Минимальная базовая система устанавливается автоматически - дополнительные пакеты доступны с помощью менеджера пакетов APT.
Termux-app - Пользовательский интерфейс и эмуляция терминала
Termux-api - Android API для использования командной строки и скриптов или программ
Termux-styling (Kotlin) - Дополнительное приложение для настройки шрифтов, терминала и цветовой схемы
Termux-tasker - Дополнительное приложение для интеграции с Tasker
Termux-packages (Shell) - Сборка системы и первичный набор пакетов для Termux
@android_its
🔥8
💣 Хочешь попробовать себя в Android-разработке?
📌 Приглашаем 14 июня в 20:00 на открытый урок в OTUS, где мы создадим приложение для трекинга воды. Занятие проведет Даниил Попов, разработчик в компании Bolt Technology OÜ (Эстония).
🚀 Мы разработаем приложение для отслеживания количества воды, которое человек пьет в сутки. Для этого мы нарисуем стаканчик и будем заполнять его по мере того, как пользователь отмечает сколько воды он выпил за сутки.
💻 Вебинар пройдет в рамках специализации «Android Developer». Это возможность оценить материалы курса и познакомиться с экспертом.
❇️ Для участия необходимо зарегистрироваться
📌 Приглашаем 14 июня в 20:00 на открытый урок в OTUS, где мы создадим приложение для трекинга воды. Занятие проведет Даниил Попов, разработчик в компании Bolt Technology OÜ (Эстония).
🚀 Мы разработаем приложение для отслеживания количества воды, которое человек пьет в сутки. Для этого мы нарисуем стаканчик и будем заполнять его по мере того, как пользователь отмечает сколько воды он выпил за сутки.
💻 Вебинар пройдет в рамках специализации «Android Developer». Это возможность оценить материалы курса и познакомиться с экспертом.
❇️ Для участия необходимо зарегистрироваться
❤5👍1
Fragment
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its
❤4👍1
Фоновое изображение в Layout
Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background="@drawable/earth". Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.
Читать дальше
@android_its
Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background="@drawable/earth". Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.
Читать дальше
@android_its
👍3🥰1
Как собирается Android-приложение?
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
Подпись приложения выполняется утилитой apksigner.
До Build Tools v24.0.3 подпись APK выполнялась утилитой
#Build
@android_its
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk fileДо Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner, которая была создана для подписи .jar-файлов, и zipalign применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file#Build
@android_its
Android Developers
AAPT2 | Android Studio | Android Developers
👍8
Опишите структуру APK-файла
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
•
• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
•
•
•
•
•
#Build
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
META-INF:•
MANIFEST.MF – манифест-файл, который содержит SHA-хэши всех файлов в APK-пакете;• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
lib – папка, содержащая скомпилированный код платформенно-зависимых библиотек. lib содержит подкаталоги для соответствующих платформ: armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips.•
res – папка, в которой лежат андроид-ресурсы в Binary XML формате.•
assets – папка, содержащая ассеты приложения.•
AndroidManifest.xml – манифест Андроид-приложения. Этот файл хранится в скомпилированном Binary XML формате.•
classes.dex – один или несколько файлов, которые представляют собой код приложения, скомпилированный в Dalvik-байткод.•
resources.arsc – файл, в котором хранится таблица маппинга id ресурсов в соответствующие файлы.#Build
👍8
