Sobes.tech
Middle

Wat betekent de Single Activity aanpak in Android-ontwikkeling?

sobes.tech AI

Antwoord van AI

De Single Activity-benadering betekent dat de app slechts één Activity component heeft, die fungeert als de hoofdcontainer. Navigatie en weergave van verschillende schermen (gebruikersinterface) binnen deze Activity worden geïmplementeerd met behulp van Fragment of View.

Voordelen:

  • Vereenvoudiging van de architectuur: Minder Activity componenten maken het beheer van de levenscyclus en toestand eenvoudiger.
  • Verbeterd navigatiebeheer: Het is gemakkelijker om navigatiegrafen tussen Fragmenten te bouwen met behulp van de Jetpack Navigation Component.
  • Kostenreductie: Activity is een zwaar component, het gebruik van één vereenvoudigt het systeemwerk.

Nadelen:

  • Difficulties met Deep Linking: Extra logica kan nodig zijn om deep links te verwerken in één enkele Activity.
  • Minder duidelijke verantwoordelijkheidsverdeling: Alle Fragmenten bevinden zich binnen één Activity, wat de code-structuur kan compliceren in grote projecten zonder duidelijke module-indeling.

Voorbeeld van gebruik van de Navigation Component in een Single Activity:

<!-- 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="Hoofd 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)
        // Navigatie component beheert de vervanging van fragmenten
    }
}

In dit voorbeeld bevat MainActivity een NavHostFragment, dat het tonen van verschillende Fragmenten beheert, zoals gedefinieerd in nav_graph.xml. Overgangen tussen Fragmenten worden gedaan via acties (action).