Что такое подход Single Activity

Ответ

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 какой-нибудь выебистый — с фрагментами это будет пиздопроебибна, честно. С активити всё-таки проще и мощнее. Так что выбирай, чувак: простота и контроль или свобода и головная боль.