Sobes.tech
Middle

Que signifie l'approche Single Activity dans le développement Android?

sobes.tech IA

Réponse de l'IA

L'approche d'activité unique signifie que l'application ne comporte qu'un seul composant Activity, qui sert de conteneur principal. La navigation et l'affichage de différents écrans (interface utilisateur) à l'intérieur de cette Activity sont réalisés à l'aide de Fragment ou View.

Avantages:

  • Simplification de l'architecture : Moins de composants Activity facilite la gestion du cycle de vie et de l'état.
  • Meilleure gestion de la navigation : Il est plus facile de construire des graphes de navigation entre Fragment en utilisant le Composant de Navigation de Jetpack.
  • Réduction des coûts : Activity est un composant lourd, l'utiliser seul facilite le travail du système.

Inconvénients:

  • Difficultés avec les liens profonds (Deep Linking) : Peut nécessiter une logique supplémentaire pour gérer les liens profonds dans une seule Activity.
  • Division des responsabilités moins claire : Tous les Fragment sont dans une même Activity, ce qui peut compliquer la structure du code dans de grands projets sans une division claire des modules.

Exemple d'utilisation du Composant de Navigation dans une activité unique :

<!-- 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)
        // Le composant de navigation gérera le remplacement des fragments
    }
}

Dans cet exemple, MainActivity contient un NavHostFragment, qui gère l'affichage de différents Fragment, définis dans nav_graph.xml. Les transitions entre Fragment sont effectuées à l'aide d'actions (action).