Android не выгружает приложение вручную по finish()
Он убивает процесс (process-level cleanup) по следующим причинам:
| Причина | Что происходит |
|---|---|
| Нехватка памяти | Android убивает least important process |
| Приложение в фоне долго не используется | Может быть выгружено «тихо» через LMK |
| Пользователь смахнул в Recents | Android убивает task + процесс |
Приложение само вызвало System.exit(0) или killProcess() | Принудительное завершение |
| Force stop через Settings | Убивается процесс + запрещается автозапуск |
Кто именно убивает процесс?
Android использует два механизма:
- ActivityManagerService (AMS)
Решает, какие процессы можно убить => вызывает Process.killProcess(pid)
2. Low Memory Killer (LMK)
(на старых версиях Android < Q) Это ядреный механизм: ядро убивает процесс, основываясь на приоритетах и OOM score
Что происходит при убийстве?
onDestroy()НЕ вызывается!
Android не успевает вызвать lifecycle-методы при принудительном убийствеViewModel,Activity,Application— всё уничтожается
Только что было в памяти — пропадаетsavedInstanceStateможет быть использован при пересоздании, если ты его сохранил
Под капотом — что делает AMS
- PID => SIGKILL (через Zygote)
- Удаляется
ProcessRecordиз AMS - Удаляется таск из
Recent Tasks, если этоtask.removeTask = true - Очистка всех
IBinder-связей