Android-приложения по умолчанию работают в одном процессе, но можно использовать несколько для решения нагруженных задач или изоляции.
Разработчик разобрал манифесты и байткод пятнадцати крупных Android-приложений. Отдельный процесс всегда дороже потока: своя инициализация, своя память, IPC вместо прямых вызовов в коде между потоками. Мультипроцессность имеет смысл только там, где Activity, Service и try/catch не закрывают задачу. Вот примеры:
1️⃣ Изоляция. Chrome, Firefox, Facebook, Instagram гоняют веб и декодеры картинок с
isolatedProcess="true". Это другой UID: без разрешений приложения и без прямого доступа к его файлам. WhatsApp так же сжимает JPEG в изолированном сервисе.2️⃣ Рестарт, который переживает смерть основного процесса. Discord, Snapchat и Uber используют либу ProcessPhoenix. WhatsApp и Maps так переключают аккаунт и Incognito: новая Activity в том же процессе не сбросит синглтоны и кэши. У TikTok есть путь убить основной процесс по давлению памяти (
:memopt). Автор честно пишет, что без замеров это выглядит сомнительно.3️⃣ Функциональность со своей жизнью. Клавиатура Snapchat выделена в процесс
:snapkeyboard, камера Instagram с локскрина — :honolulu, Instant Games Facebook — :quicksilver, загрузчик TikTok — :downloader, capability-тесты YouTube — :glcheck. Например, это позволяет OOM отдельной функции не ронять всё приложение.Telegram, Spotify и ChatGPT свои сервисы (звонки, плеер, загрузки, войсы) держат в одном процессе. Несколько функций ≠ несколько процессов.
#Android #AndroidDev #Internals