Какова структура Android-проекта?
В проекте обычно присутствуют следующие файлы и директории:
•
•
•
• Файл
•
•
•
•
•
•
•
•
•
•
#System
В проекте обычно присутствуют следующие файлы и директории:
•
AndroidManifest.xml
– определение компонентов и требуемых возможностей девайса для приложения.•
build.gradle
– файлы конфигурации сборки для всего приложения и отдельных модулей.•
src
– исходный код классов и ресурсы проекта.• Файл
.R
– сгенерированный на этапе компиляции перечень всех ресурсов проекта.•
assets
– файлы, которые должны попасть в .apk как есть, без изменений.•
res/drawable
– директория для картинок (drawable-объектов).•
res/layout
– директория для файлов которые определяют UI приложения.•
res/values
– директория для различных XML-файлов с простыми ресурсами, такими как строки, цвета и числа. •
res/mipmap
– иконки для launcher-а разных разрешений.•
res/menu
– XML с определениями разных меню.•
res/font
– шрифты.•
res/xml
– XML файлы, доступные через Resources.getXML()
.•
res/raw
– различные файлы, доступные в виде потоков данных через Resources.openRawResource()
.•
res/anim, res/animator
– анимации.#System
Может ли приложение быть запущено в нескольких процессах?
Короткий ответ – Да.
Но для начала давайте разберемся чем процесс отличается от потока.
Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.
Поток – это сущность на уровне Runtime Environment.
Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).
Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов
Важно: При старте нового процесса создается инстанс приложения и снова вызывается
Подробнее про процессы и треды читайте в документации.
#System
Короткий ответ – Да.
Но для начала давайте разберемся чем процесс отличается от потока.
Процесс – это сущность на уровне ОС. Каждая программа может быть запущена в одном или нескольких процессах.
Поток – это сущность на уровне Runtime Environment.
Программа может выполняться в нескольких процессах. В каждом из процессов может быть создано несколько потоков (Java Threads).
Вернемся к андроиду. В предыдущем посте мы рассмотрели базовые компоненты и узнали, что каждый из компонентов может быть точкой входа в приложение. По умолчанию компоненты приложения работают в дефолтном процессе, но каждый из компонентов
<activity>
, <service>
, <receiver>
, <provider>
может иметь поле android:process="<name>"
в андроид манифесте. Кастомное значение этого поля явно говорит системе в каком процессе будет работать компонент.Важно: При старте нового процесса создается инстанс приложения и снова вызывается
Application.onCreate()
. Если в этом методе вы инициализируете модули или библиотеки, которые используются только в главном процессе, то не забывайте проверять, в каком процессе вы находитесь в момент инициализации.Подробнее про процессы и треды читайте в документации.
#System
Приоритеты процессов
Процессы делятся по приоритету на 4 вида, в порядке убывания:
1. Видимый активный процесс (Foreground process). В этом процессе работает приложение, с которым взаимодействует пользователь. Процесс находится в этом состоянии в следующих случаях:
-
- Во время выполнения
- Запущен
2. Видимый процесс. Пользователь знает о приложении, запущенном в этом процессе, но не взаимодействует с ним:
-
-
-
3. Background Service. Процесс с сервисом, запущенным командой startService().
4. Закэшированный процесс. К ним относятся пустые процессы, используемые при старте приложений, и процессы, в которых все активити в
Система убивает процессы в порядке возрастания их приоритета для восстановления ресурсов. Подробнее
#Lifecycle
#System
Процессы делятся по приоритету на 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