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

Ответ

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

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

  • Процессы создаются системой при запуске компонентов (Activity, Service и т.д.).

  • Можно задать свой процесс в AndroidManifest.xml через атрибут android:process:

    <activity android:name=".SecondActivity" android:process=":custom_process"/>  
  • : — приватный процесс (только для приложения), имя без : — глобальный (общий для нескольких приложений).

  • Процессы уничтожаются системой при нехватке памяти (приоритет зависит от состояния компонентов).

Пример: Сервис в отдельном процессе:

<service android:name=".MyService" android:process=":my_service"/>  

Ответ 18+ 🔞

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

Но самое интересное, ёпта, это то, что ты можешь эту мамкину заботу обойти и сказать: «Знаешь что? Я хочу отдельную хату для этой своей фигни». И делается это в манифесте, в этом самом AndroidManifest.xml. Просто пишешь android:process=":my_cool_process" и всё, твой компонент уже бултыхается в своём собственном мире.

Смотри, вот тут тонкий момент, запоминай: если имя процесса начинается с двоеточия (:), типа :custom_process, то это как приватная комната в твоей же квартире — доступ есть только твоему приложению. А если написать просто имя, без двоеточия, например global_process, то это уже как общий подъезд — теоретически другие приложения могут туда зайти, если права совпадут. Но это уже такие дебри, куда без надобности лучше не совать свой нос, а то доверия ебать ноль к таким схемам.

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

Вот, например, если тебе надо, чтобы сервис работал особняком, не в главном процессе, пишешь так:

<service android:name=".MyService" android:process=":my_service"/>

И всё, ёбааать, он теперь живёт отдельно. Удобно, если этот сервис такой манда с ушами, который может загнуться, а основное приложение должно остаться в живых. Но помни, межпроцессное общение — это уже отдельная ебушки-воробушки, через Intent-ы, Messenger или AIDL. А то начнёшь делать и сам от себя охуеешь, почему данные не передаются.