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
Activitykomponentų palengvina gyvavimo ciklo ir būsenos valdymą. - Pagerinta navigacijos valdymas: Lengviau kurti navigacijos grafus tarp
Fragmentų naudojant Jetpack Navigation komponentą. - Mažesni išlaidos:
Activityyra 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 vienojeActivity, 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).