Middle
O que significa a abordagem Single Activity no desenvolvimento Android?
sobes.tech IA
Resposta da IA
A abordagem de Atividade Única significa que a aplicação possui apenas um componente Activity, que atua como o contêiner principal. A navegação e a exibição de diferentes telas (interface de usuário) dentro dessa Activity são implementadas usando Fragment ou View.
Vantagens:
- Simplificação da arquitetura: Menos componentes
Activityfacilitam a gestão do ciclo de vida e do estado. - Melhor gestão da navegação: É mais fácil construir gráficos de navegação entre
Fragmentusando o Componente de Navegação do Jetpack. - Redução de custos:
Activityé um componente pesado, usar apenas um facilita o trabalho do sistema.
Desvantagens:
- Dificuldades com links profundos (Deep Linking): Pode ser necessário lógica adicional para lidar com deep links em uma única
Activity. - Divisão de responsabilidades menos clara: Todos os
Fragmentestão dentro de uma mesmaActivity, o que pode complicar a estrutura do código em projetos grandes sem uma divisão clara de módulos.
Exemplo de uso do Componente de Navegação em uma Atividade Única:
<!-- res/navigation/nav_graph.xml -->
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_graph"
app:startDestination="@id/mainFragment">
<fragment
android:id="@+id/mainFragment"
android:name="com.example.myapp.ui.main.MainFragment"
android:label="Main Fragment">
<action
android:id="@+id/action_mainFragment_to_detailFragment"
app:destination="@id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.myapp.ui.detail.DetailFragment"
android:label="Detail Fragment" />
</navigation>
<!-- activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"/>
// MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// O componente de navegação gerenciará a substituição de fragmentos
}
}
Neste exemplo, MainActivity contém um NavHostFragment, que gerencia a exibição de diferentes Fragment, definidos em nav_graph.xml. As transições entre Fragment são feitas usando ações (action).