Что такое процесс в Kotlin

Ответ

Процесс в Kotlin (и Android) — это изолированное окружение, в котором выполняется приложение. Каждое приложение запускается в собственном процессе с отдельной виртуальной машиной (VM) и выделенной памятью.

Особенности:

  • По умолчанию все компоненты приложения работают в одном процессе.
  • Можно указать отдельный процесс для компонента в AndroidManifest.xml:
<activity android:name=".SecondActivity" android:process=":second_process"/>  
  • : — приватный процесс (только для приложения), имя без : — глобальный (может быть общим для нескольких приложений).
  • Межпроцессное взаимодействие (IPC) осуществляется через Binder, AIDL или Messenger.

Пример:

// Проверка текущего процесса  
if (packageName != getProcessName()) {  
    // Код выполняется в другом процессе  
}  

Ответ 18+ 🔞

Ну, слушай, давай разберёмся с этими процессами в андроиде, а то тут народ иногда путается, как будто в первый раз слышит. Представь себе, что каждое твоё приложение — это такая отдельная, блядь, квартира. Со своими стенами, своей кухней и своим сортиром. Это и есть процесс. В этой квартире живёт твоя виртуальная машина, жрёт память и делает свои делишки, никого не трогая. Изначально вся твоя семья — активити, сервисы, вся эта кодла — живёт в одной квартире. Это нормально, удобно, друг другу носки не кидают.

Но иногда, ёпта, случается так, что одному члену семьи нужно своё пространство. Например, старший сын-активити такой: «Папа, я музыку гоняю, а ты тут телевизор смотришь, мешаешь!». И ты ему выделяешь отдельную комнату. В мире андроида это делается прямо в манифесте, одной строчкой. Пишешь, мол, android:process=":second_process" для своей SecondActivity, и всё — пошёл, сынок, в свою берлогу. Двоеточие в начале — это, типа, приватная комната, только для нашего приложения. Без двоеточия — это уже общий коридор на этаже, куда могут зайти и соседи, если им позволят. Но это уже, блядь, овердохуища ответственности, туда без нубы лезть не стоит.

А теперь главный прикол. Они же теперь в разных квартирах! Как им общаться? Кричать через стену? Не, так не пойдёт. Для этого есть специальные штуки — Binder, AIDL или Messenger. Это типа таких окошек-люков между квартирами, через которые можно передавать записки и даже целые посылки. Без них — нихуя не получится, один процесс про другого нихуя не знает.

И вот, чтобы не охуеть в коде и понять, в какой ты сейчас квартире находишься, можно сделать простую проверку. Сравниваешь имя пакета приложения с именем текущего процесса. Если они разные — поздравляю, ты, сука, в гостях у того самого сына в его отдельной комнате.

if (packageName != getProcessName()) {
    // Код выполняется в другом процессе
}

Вот и вся магия. Главное — помнить, что каждая такая отдельная квартира жрёт память и ресурсы, как не в себя. Так что плодить их просто так — идея пиздопроебибная. Только если реально надо, например, для тяжёлого сервиса, который чтобы не грохнулся вместе со всем приложением. А так — живи дружно в одной, пока есть возможность.