Intent'ler Nasıl Çalışır ve Activity'ler Arasında Veri Nasıl Aktarılır

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

Intent, Android'de bir eylemi gerçekleştirmek niyetini açıklayan bir nesnedir: bir Activity, Service veya BroadcastReceiver başlatmak ve/veya bunlar arasında extras aracılığıyla veri aktarmak. Aşağıda, Java ve Kotlin ile veri gönderme, alma ve geri döndürme üzerine kompakt ve pratik bir rehber bulacaksınız.

İçindekiler {{TOC_AUTOMATIC}}

Intent Nedir ve Hangi Türleri Vardır?

Intent; action (eylem), data (URI), extras (Bundle) ve flag'ler (bayraklar) içerir. İki temel türü vardır:

  • Açık (Explicit) — Belirli bir sınıfı belirtirsiniz: uygulamanız içindeki geçişler için kullanılır.
  • Kapalı (Implicit) — Bir eylemi tanımlarsınız (örneğin, ACTION_VIEW) ve sistem uygun bileşeni seçer.

Uygulama içi geçişler için her zaman açık Intent'leri tercih edin; daha güvenilir ve hızlıdırlar.

Basit Verileri Aktarma (String, int, boolean)

Veriler, putExtra yöntemleri kullanılarak extras içine yerleştirilir ve getStringExtra, getIntExtra vb. yöntemlerle çıkarılır.

Java Örneği (MainActivity -> SecondActivity):

// MainActivity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("user_name", "İvan");
intent.putExtra("user_age", 25);
startActivity(intent);
// SecondActivity - onCreate içinde
Intent intent = getIntent();
String name = intent.getStringExtra("user_name");
int age = intent.getIntExtra("user_age", 0);

Kotlin eşdeğeri:

val intent = Intent(this, SecondActivity::class.java).apply {
    putExtra("user_name", "İvan")
    putExtra("user_age", 25)
}
startActivity(intent)

// SecondActivity içinde
val name = intent.getStringExtra("user_name")
val age = intent.getIntExtra("user_age", 0)

Sonuç Döndürme: Activity Result API (Modern Yöntem)

startActivityForResult kullanımdan kaldırıldı. Bunun yerine Activity Result API kullanın:

Kotlin örneği:

// Kayıt
private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data = result.data
        val message = data?.getStringExtra("result_message")
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}

// Başlatma
val intent = Intent(this, SecondActivity::class.java)
launcher.launch(intent)

SecondActivity içinde:

val resultIntent = Intent().apply {
    putExtra("result_message", "Veriler kaydedildi!")
}
setResult(Activity.RESULT_OK, resultIntent)
finish()

Yeni projelerde startActivityForResult kullanmayın; Activity Result API'ye geçin.

Karmaşık Nesneleri Aktarma: Parcelable vs Serializable

Parcelable daha hızlıdır ve Android için önerilir. Kısaltılmış User örneği (Java):

public class User implements Parcelable {
    private String name;
    private int age;
    // writeToParcel / CREATOR / Parcel'den oluşturulan kurucu
}

Aktarım:

intent.putExtra("user", user); // user Parcelable uygular
User user = getIntent().getParcelableExtra("user");

Nesne küçükse ve sizin için daha kolaysa Serializable kullanabilirsiniz, ancak ek yükü göz önünde bulundurun.

Navigation Component kullanan projeler için Safe Args kullanın; geçişler için tip güvenliği sağlayan argümanlar üretir.

Sık Yapılan Hatalar

  • Extra varlığını kontrol etmemek: intent.hasExtra("key") veya null kontrolleri kullanın.
  • Büyük verileri (Bitmap) Intent üzerinden aktarmak; bu hataya yol açar. Bunun yerine URI/bağlantı aktarın veya önbelleğe kaydedin.
  • Hassas verileri (parolalar, token'lar) aktarmak güvensizdir; ADB günlüklerine düşebilirler.
  • Yanlış Parcelable uygulaması; okuma sırasında null sonuç ve çökmelere neden olur.

SSS

  • Intent'te bir anahtarın olup olmadığını nasıl kontrol ederim?

    • if (intent != null && intent.hasExtra("key")) { ... }
  • Nesne Listesi aktarılabilir mi?

    • Evet: basit listeler için putParcelableArrayListExtra veya putStringArrayListExtra.
  • Uygulamalar arası aktarım için hangisi daha iyi — Intent mi yoksa ContentProvider mı?

    • Uygulama içinde kendi verilerinizi aktarmak için Intent kullanışlıdır; uygulamalar arasında büyük miktarda veriyi güvenli bir şekilde paylaşmak için ContentProvider daha iyidir.

Sonuç: Uygulama içi gezinme için basit extras ve açık Intent'lerle başlayın; nesneler için Parcelable kullanın ve veri döndürmek için Activity Result API'yi tercih edin. Gerekirse Kotlin örneklerinin tam sürümlerini veya Navigation Component ve Safe Args içeren bir örneği gönderebilirim.