Sobes.tech
Middle

¿Qué significa el enfoque de Actividad Única en el desarrollo de Android?

sobes.tech AI

Respuesta de la IA

El enfoque de actividad única significa que la aplicación tiene solo un componente Activity, que actúa como el contenedor principal. La navegación y la visualización de diferentes pantallas (interfaz de usuario) dentro de esta Activity se implementan mediante Fragment o View.

Ventajas:

  • Simplificación de la arquitectura: Menos componentes Activity facilitan la gestión del ciclo de vida y el estado.
  • Mejor manejo de la navegación: Es más fácil construir gráficos de navegación entre Fragment usando el Componente de Navegación de Jetpack.
  • Reducción de costos: Activity es un componente pesado, usar uno solo facilita el trabajo del sistema.

Desventajas:

  • Dificultades con enlaces profundos (Deep Linking): Puede requerir lógica adicional para manejar enlaces profundos en una sola Activity.
  • División de responsabilidades menos clara: Todos los Fragment están dentro de una misma Activity, lo que puede complicar la estructura del código en proyectos grandes sin una división clara de módulos.

Ejemplo de uso del Componente de Navegación en una Actividad Ú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)
        // El componente de navegación gestionará la sustitución de fragmentos
    }
}

En este ejemplo, MainActivity contiene un NavHostFragment, que gestiona la visualización de diferentes Fragment, definidos en nav_graph.xml. Las transiciones entre Fragment se realizan mediante acciones (action).