Sobes.tech
Middle

Android өнүктүрүүдө Single Activity ыкмасы эмнени билдирет?

sobes.tech AI

AIден жооп

Жалгыз Activity ыкмасы дегенде, колдонмодо гана бир Activity компоненти бар, ал негизги контейнер катары кызмат кылат. Навигация жана бул Activity ичинде ар кандай экрандарды (пайдаланучунун интерфейси) көрсөтүү Fragmentтер же Viewтер аркылуу ишке ашырылат.

Артыкчылыктары:

  • Архитектураны жөнөкөйлөтүү: Аз компоненттүү Activity жашоонун циклин жана абалын башкарууну жеңилдетет.
  • Навигацияны жакшыртуу: Jetpack Navigation Component колдонуп, Fragmentтер ортосунда навигация графиктерин түзүү оңой.
  • Шамалдуу чыгымдарды азайтуу: Activity — оор компонент, бирин колдонуу системанын ишин жеңилдетет.

Кемчиликтери:

  • Туңгуч шилтемелер менен кыйынчылыктар (Deep Linking): Бир Activity ичинде deep links иштетүү үчүн кошумча логика талап кылышы мүмкүн.
  • Жоопкерчиликтин бөлүнүшү аз көрүнөт: Бардык Fragmentтер бир Activity ичинде жайгашкан, бул чоң долбоорлордо код структурасын кыйындатышы мүмкүн, бөлүнүшү так болбосо.

Single Activityда Navigation Component колдонуу мисалы:

<!-- 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)
        // Navigation компонент фрагменттердин алмашуусун башкаруу үчүн
    }
}

Бул мисалда MainActivity NavHostFragment камтыйт, ал nav_graph.xml ичинде аныкталган ар кандай Fragmentтердин көрсөтүлүшүн көзөмөлдөйт. Fragmentтер ортосунда өтүүлөр аракеттер (action) аркылуу жүргүзүлөт.