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
Activitybileş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:
Activityağı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
Activityiçinde deep linkleri işlemek için ek mantık gerekebilir. - Sorumlulukların daha az belirgin bölünmesi: Tüm
Fragmentler aynıActivityiç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.