recreate() уничтожает и сразу создаёт ту же Activity (как config change); finish() завершает и убирает из back stack. После finish onDestroy, но процесс может жить дальше.
Разбор
- recreate удобен после смены темы night mode.
- finishAffinity завершает весь task affinity набор.
- isFinishing помогает отличить уход от recreate в onDestroy.
- Не путайте с process death — finish не пишет state «на будущее» сам по себе.
Итог
recreate = пересоздание на месте; finish = выход из стека.