Sobes.tech
Middle

Ką reiškia Single Activity požiūris Android kūrime?

sobes.tech AI

Atsakymas iš AI

Vienos veiklos požiūris reiškia, kad programėlėje yra tik viena Activity komponentas, kuris veikia kaip pagrindinis konteineris. Navigacija ir skirtingų ekranų (vartotojo sąsajos) rodymas šioje Activity įgyvendinamas naudojant Fragmentus arba Viewus.

Privalumai:

  • Architektūros supaprastinimas: Mažiau Activity komponentų palengvina gyvavimo ciklo ir būsenos valdymą.
  • Pagerinta navigacijos valdymas: Lengviau kurti navigacijos grafus tarp Fragmentų naudojant Jetpack Navigation komponentą.
  • Mažesni išlaidos: Activity yra sunkus komponentas, vieno naudojimas palengvina sistemos darbą.

Trūkumai:

  • Gilus nuorodų (Deep Linking) sudėtingumas: Gali prireikti papildomos logikos giliosioms nuorodoms apdoroti vienoje Activity.
  • Mažiau aiškus atsakomybės pasidalijimas: Visos Fragmentai yra vienoje Activity, tai gali apsunkinti kodo struktūrą dideliuose projektuose be aiškios modulių dalybos.

Pavyzdys naudojant Navigation komponentą vienoje veikloje:

<!-- 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="Pagrindinis fragmentas">
        <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="Detalės fragmentas" />
</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)
        // Navigacijos komponentas valdo fragmentų keitimą
    }
}

Šiame pavyzdyje MainActivity turi NavHostFragment, kuris valdo įvairių Fragmentų rodymą, apibrėžtą nav_graph.xml. Perėjimai tarp Fragmentų vyksta naudojant veiksmus (action).