Android'de Intent, Action ve extras ile Çalışma

Kerem Aydın·10 Temmuz 2026·⏱2 dk

Intent — bileşenleri başlatmak ve mesaj iletmek için kullanılan bir nesnedir; action, Intent'in amacını tanımlar; extras (Bundle) — veri aktarmak için kullanılan alandır. Uygulama içi geçişler için açık Intent'leri, sistem eylemleri için örtük Intent'leri kullanın; nesneler için Parcelable tercih edin.

Intent Nedir ve Action'ın Rolü

Intent bir kapsayıcıdır: action (string), data (Uri), category ve extras (Bundle).

  • Açık (explicit) Intent: bileşenin sınıfını belirtir — uygulama içinde kullanılır.
  • Örtük (implicit) Intent: bir eylem veya MIME türünü belirtir; sistem, uygun bileşeni üzerinden seçer.
    Action — hedefin string tanımlayıcısıdır (örneğin, ACTION_VIEW, ACTION_SEND) veya özel "com.example.MY_ACTION". Örtük Intent'lerde action genellikle doğru eşleştirme için data ve category ile birlikte kullanılır.

Extras Aracılığıyla Veri Aktarma (Pratik)

Extras bir Bundle'dır; veriler anahtar → değer çiftleri olarak saklanır. Desteklenen türler: primitive'ler, String, Parcelable, Serializable, diziler ve listeler.

Kotlin'de yazma ve okuma örnekleri:

// Gönderme (Activity A)
val intent = Intent(this, SecondActivity::class.java).apply {
    putExtra("userId", 123)
    putExtra("username", "ivan")
    putExtra("payload", myParcelable) // Parcelable
}
startActivity(intent)

// Alma (Activity B)
val userId = intent.getIntExtra("userId", -1)
val username = intent.getStringExtra("username") ?: ""
val payload = intent.getParcelableExtra<MyParcelable>("payload")

Öneriler:

  • Nesneler için Parcelable uygulayın — daha hızlıdır ve Serializable'a tercih edilir.
  • Extras boyutunu minimize edin: büyük nesneleri ViewModel, Singleton'lar veya URI/dosya üzerinden aktarmak daha iyidir.
  • Her zaman null kontrolü yapın ve varsayılan değerleri göz önünde bulundurun.

Verileri geri döndürmek için Activity Result API kullanın (kullanımdan kaldırılmış startActivityForResult'un yerine geçer). Bu, yaşam döngüsü yönetimi açısından daha güvenilir ve daha basittir.

Extras'a hassas bilgiler (parolalar, token'lar) koymayın. Extras loglarda veya ADB'de görünebilir.

Bileşen Başlatma: Activity, Service, Broadcast

Activity:

  • startActivity(intent) — basit başlatma.
  • Gerektiğinde flag'leri belirtin: FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP.
  • Sonuç almak için — Activity Result API.

Service:

  • startService(intent) veya foreground servisler için startForegroundService(intent) (API 26+).
  • Durdurma: stopService(intent) veya servis içinde stopSelf().

Broadcast:

  • sendBroadcast(intent) — genel broadcast.
  • Yerel olaylar için LocalBroadcastManager veya diğer yerel mekanizmaları kullanın (bu daha güvenlidir).

Metin göndermek için örtük Intent örneği:

val send = Intent(Intent.ACTION_SEND).apply {
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, "Bunu paylaş")
}
startActivity(Intent.createChooser(send, "Uygulama seç"))

Sık Yapılan Hatalar

  • Büyük nesneleri extras üzerinden aktarmaya çalışmak — TransactionTooLargeException hatasına yol açar. Çözüm: diğer mekanizmaları kullanmak (ViewModel, dosya, DB).
  • Yanlış anahtarlar — kod sessizce bozulur. Anahtarlar için sabitler kullanın.
  • Null durumlarını işlememek ve okuma sırasında varsayılan değerleri dikkate almamak.
  • startActivity'tan sonuç beklemek yerine Activity Result API kullanmamak.

SSS

  • Bir nesne nasıl aktarılır? — Onu Parcelable yapın ve putExtra/getParcelableExtra kullanın.
  • Bitmap extras üzerinden aktarılabilir mi? — Teknik olarak evet, ancak önerilmez (çok yer kaplar). Geçici bir dosyaya kaydedip Uri aktarmak daha iyidir.
  • Belirli bir örtük Intent nasıl yakalanır? — Manifest'te ilgili 'ı tanımlayın veya BroadcastReceiver'ı programlı olarak kaydedin.