Ответ
Приложение запускается как процесс при старте компонента (Activity, Service, BroadcastReceiver). Система создает процесс, назначает уникальный PID и main thread (UI thread).
Основные этапы:
- Zygote fork - система клонирует заранее созданный процесс Zygote
- Загрузка классов приложения через ClassLoader
- Создание Application-объекта (вызывается onCreate())
- Запуск main thread (Looper.prepareMainLooper())
Пример манифеста с указанием процесса:
<activity
android:name=".MainActivity"
android:process=":custom_process"/>
Нюансы:
- По умолчанию все компоненты работают в одном процессе
- Можно задать отдельный процесс через android:process
- Процессы с ":" - приватные, без ":" - глобальные
- Система может убить фоновые процессы при нехватке памяти