Activity ve MainActivity — Kısa ve Öz

Kerem Aydın·6 Temmuz 2026·⏱3 dk

Activity, uygulamanın ayrı bir ekranıdır (UI + mantık); MainActivity ise genellikle giriş noktası olarak tanımlanır (intent-filter MAIN + LAUNCHER). Aşağıda projede Activity'den sorumlu olan bileşenler, MainActivity'nin nasıl oluşturulup kaydedileceği ve yaşam döngüsüyle nasıl doğru şekilde çalışılacağı anlatılmaktadır.

Proje Yapısı: Activity ve Düzen Dosyaları Nerede Bulunur?

app modülündeki temel konumlar:

  • app/src/main/java/... — Kotlin/Java sınıfları; burada MainActivity.kt yer alır.
  • app/src/main/res/layout — XML düzen dosyaları (activity_main.xml).
  • app/src/main/AndroidManifest.xml — Activity kaydı ve giriş noktası.
  • build.gradle (Module: app) — bağımlılıklar (Compose, Navigation vb.).

AndroidManifest.xml içinde başlangıç Activity'si için örnek kayıt:

<activity android:name=".MainActivity" android:exported="true">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Jetpack Compose kullanıyorsanız, düzen dosyası res/layout içinde olmayabilir; UI, Activity içindeki setContent { } bloğunda tanımlanır.

MainActivity Oluşturma ve Yapılandırma (Kotlin, 2026)

Compose ile temel şablon:

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
      MyAppTheme {
        Surface(modifier = Modifier.fillMaxSize()) {
          Greeting("Android")
        }
      }
    }
  }
}
@Composable fun Greeting(name: String) { Text("Hello $name!") }

Compose kullanmıyorsanız:

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
}

Activity ekleme yöntemi: package üzerinde sağ tık → New → Activity → Empty Activity — Studio, sınıfı ve gerekirse manifest kaydını otomatik oluşturur.

Durum yönetimi için Kotlin ile birlikte ViewModel ve Flow/LiveData kullanın; kod daha kısa olur ve bellek sızıntıları azalır.

Activity Yaşam Döngüsü: Ne Zaman Ne Yapılır?

Temel geri çağrı yöntemleri ve önerilen işlemler:

  • onCreate(): UI, ViewModel ve aboneliklerin başlatılması.
  • onStart(): Activity görünür hale gelir — animasyonları başlatın.
  • onResume(): Activity ön planda — girişi, kamerayı ve zamanlayıcıları yeniden etkinleştirin.
  • onPause(): Verileri kaydedin, yoğun işlemleri duraklatın.
  • onStop(): Kaynakları serbest bırakın, animasyonları durdurun.
  • onDestroy(): Nihai temizlik (abonelikleri iptal edin, veritabanlarını kapatın).
  • onRestart(): onStop() sonrası geri dönüş.

Ağır işlemleri onResume() içinde tutmayın; ViewModel ve coroutine'ler kullanın, bunları onDestroy() içinde iptal edin.

Durumların Kısa Tablosu

YöntemGörünürOdakNe Yapılır
onCreatehayırhayırBaşlatma
onStartevethayırUI Hazırlığı
onResumeevetevetEtkileşim
onPauseevethayırDurum Kaydetme
onStophayırhayırKaynak Serbest Bırakma
onDestroyhayırhayırNihai Temizlik

Büyük nesneleri Activity'de (Context) tutmayın; uzun ömürlü kaynaklar için ViewModel ve applicationContext kullanın.

Geçişler, Veri Aktarımı ve En İyi Uygulamalar

  • Başka bir Activity başlatma:
    • Intent: startActivity(Intent(this, SecondActivity::class.java))
    • Sonuç almak için eski startActivityForResult yerine Activity Result API (registerForActivityResult) kullanın.
  • Veri aktarımı: intent.putExtra / intent.getParcelableExtra, ancak büyük veri kümeleri için ortak ViewModel veya navigasyon host'u tercih edin.
  • Navigasyon: Jetpack Navigation (XML/Fragments için) veya Navigation Compose. Mümkün olduğunca az Activity kullanmak ve ekranları fragment'ler/navigasyon üzerinden yönetmek daha iyidir; bu sayede durum koruma daha kolay olur.
  • Uzun süren görevlerle çalışma: ViewModel + coroutineScope + lifecycleScope, UI güncellemeleri için LiveData/Flow.

Sık Yapılan Hatalar

  • Activity context'inin singleton'larda tutulması → bellek sızıntıları.
  • onResume/onCreate içinde eşzamanlı olmayan ağır işlemler → UI donmaları.
  • Activity'nin manifest'te kaydedilmemesi (özellikle manuel oluşturulduğunda) → ekran açılmaz.
  • Activity Result API yerine startActivityForResult kullanılması.
  • NavHost olmadan karmaşık navigasyon → Activity sayısının artması ve kod tekrarı.

SSS

  • Uygulamanın her "sayfası" için ayrı bir Activity mi oluşturulmalı?
    • Hayır. Genellikle tek bir Activity kapsayıcı olarak kullanılır ve ekranlar için navigasyon (fragment'ler/Compose Nav) tercih edilir.
  • Ekran döndürme sırasında durum nasıl korunur?
    • ViewModel + SavedStateHandle veya basit veriler için onSaveInstanceState.
  • Fragment mi yoksa Compose mu kullanılmalı?
    • Compose, UI için modern bir araçtır. Fragment'ler, hibrit projelerde veya geçiş dönemlerinde hala geçerlidir.

Basit bir MainActivity ile başlayın, mantığı ViewModel'e taşıyın ve Navigation kullanın; böylece çoğu sorundan kaçınır ve projenizi büyümeye hazırlarsınız.