Ответ
Single Activity — это архитектурный подход, при котором приложение использует только одну Activity, а навигация и UI управляются через Fragments, Jetpack Navigation или Compose.
Преимущества:
- Упрощает управление жизненным циклом
- Уменьшает накладные расходы на создание/уничтожение Activity
- Позволяет гибко управлять UI через FragmentManager
Пример с Navigation Component:
// MainActivity.kt
navController = findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
// nav_graph.xml
<navigation>
<fragment android:id="@+id/homeFragment" ... />
<fragment android:id="@+id/detailsFragment" ... />
</navigation>
Недостатки:
- Сложность при глубокой навигации
- Ограничения в кастомизации переходов (по сравнению с Activity)
Ответ 18+ 🔞
Да ты посмотри, какая мода пошла! Single Activity, блядь. Это когда в твоём приложении одна-единственная Activity торчит, как хуй с горы, а всё остальное — фрагменты, навигация, компоуз, ёпта. Вся движуха внутри одного активити происходит, представляешь?
Что в этом хорошего, спросишь ты? Ну, во-первых, жизненный цикл у тебя не пиздец как усложняется. Одна штука — за ней и следить проще. Не будет у тебя ситуации, когда одна активити уже воняет, другая только рождается, а третья где-то на бэкстеке зависла, как манда с ушами. Во-вторых, ресурсов жрёт меньше — не надо каждый раз новую активити создавать и старую хоронить, это же не каркалыга какая-то. И в-третьих, UI-то твой становится гибким, как хитрая жопа, потому что FragmentManager позволяет тебе вертеть фрагментами, как хочешь.
Вот тебе примерчик, как это с Navigation Component выглядит:
// MainActivity.kt
navController = findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
// nav_graph.xml
<navigation>
<fragment android:id="@+id/homeFragment" ... />
<fragment android:id="@+id/detailsFragment" ... />
</navigation>
Всё, приехали. Activity одна, а навигационный граф рулит, куда какие фрагменты совать.
А теперь про недостатки, их тоже овердохуища. Во-первых, если навигация у тебя сложная, в три этажа, с кучей экранов — можно так запутаться в бэкстеке фрагментов, что сам от себя охуеешь. Во-вторых, с переходами между экранами беда. Ну, то есть стандартные анимации — пожалуйста, но если тебе надо что-то эпичное, shared element transition какой-нибудь выебистый — с фрагментами это будет пиздопроебибна, честно. С активити всё-таки проще и мощнее. Так что выбирай, чувак: простота и контроль или свобода и головная боль.