Sobes.tech
Middle

Android geliştirmede Single Activity yaklaşımı ne anlama geliyor?

sobes.tech yapay zeka

AI'dan gelen yanıt

Tek Aktiviteli yaklaşım, uygulamada yalnızca ana konteyner olarak işlev gören tek bir Activity bileşeni olduğu anlamına gelir. Bu Activity içinde farklı ekranların (kullanıcı arayüzü) gezinmesi ve görüntülenmesi, Fragment veya View kullanılarak gerçekleştirilir.

Avantajlar:

  • Mimariyi basitleştirme: Daha az Activity bileşeni, yaşam döngüsü ve durumu yönetmeyi kolaylaştırır.
  • Geliştirilmiş gezinme yönetimi: Jetpack Navigation Component kullanılarak Fragmentler arasında gezinme diyagramları oluşturmak daha kolaydır.
  • Yük azaltma: Activity ağır bir bileşen olup, tek bir tane kullanmak sistemin işini kolaylaştırır.

Dezavantajlar:

  • Derin bağlantılarla (Deep Linking) ilgili zorluklar: Tek bir Activity içinde deep linkleri işlemek için ek mantık gerekebilir.
  • Sorumlulukların daha az belirgin bölünmesi: Tüm Fragmentler aynı Activity içinde bulunur, bu da büyük projelerde modüllerin net bölünmemesi durumunda kod yapısını karmaşıklaştırabilir.

Single Activity'de Navigation Component kullanımı örneği:

<!-- 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="Ana 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="Detay 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)
        // Navigasyon bileşeni, fragment değişimini yönetecek
    }
}

Bu örnekte, MainActivity bir NavHostFragment içerir ve bu, nav_graph.xml içinde tanımlanan çeşitli Fragmentların görüntülenmesini yönetir. Fragmentlar arasındaki geçişler, action kullanılarak yapılır.