Android'de hangi veri türleri vardır ve nasıl uygulanır

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

Android'deki veri türleri; bir uygulamada verilerin nasıl depolandığını, aktarıldığını ve işlendiğini belirleyen kurallar ve formatlar kümesidir (ilkel türler, referans nesneler, Parcelable/Serializable, MIME türleri, bileşen türleri, kaynaklar ve asenkron türler). Aşağıda kısa açıklamalar ve pratik tavsiyeler bulacaksınız.

Temel veri türü kategorileri ve rolleri

  • İlkel türler (int, long, float, boolean): Hızlıdır, bellek tahsisi gerektirmez — sayaçlar, animasyonlar ve sık yapılan hesaplamalar için kullanın.
  • Referans türler (String, List, View, Bitmap): Karmaşık yapıları barındırır — RecyclerView için listeler, ImageView için görseller. Kotlin'de gereksiz kutulamadan (boxing) kaçının; mümkün olduğunca inline sınıflar kullanın.
  • Parcelable vs Serializable:
    • Parcelable — Android'in yerel serileştirme mekanizmasıdır, daha hızlı ve daha kompakttır; Intent veya Binder üzerinden nesne aktarımı için uygulayın.
    • Serializable — Daha basittir ancak daha yavaştır ve düşük donanımlı cihazlarda OOM (Out Of Memory) riski daha yüksektir.
  • MIME türleri (image/jpeg, application/pdf): Intent filtreleri ve ContentProvider için içerik formatını belirler; dosya paylaşımı ve açma işlemlerinde zorunludur.
  • Bileşenler (Activity, Service, BroadcastReceiver, ContentProvider): Her birinin kendi yaşam döngüsü ve veri yönlendirme için özel "türde" Intent/URI'si vardır.
  • Kaynaklar ve düzen (layout) türleri: drawable, color, string-array, layout (ConstraintLayout, LinearLayout) — R üzerinden ve data binding/Compose ile kullanılır.
  • Asenkron türler (suspend, Flow, StateFlow): Veri akışları ve UI güncellemeleriyle çalışmanın modern yolu (Compose'da collectAsState, Room'da Flow).

Kotlin'de Activity'ler arasında nesne aktarmak için @Parcelize kullanın — kod kısalır ve manuel uygulama hatalarından kaçınılır.

Nerede ve nasıl uygulanır — Somut senaryolar

  • Ekranlar arası veri aktarımı: intent.putExtra("data", myParcelableObject) — Parcelable'ı @Parcelize ile uygulayın.
  • IPC ve servisler: İşlemler arasında karmaşık nesneler aktarmak için AIDL/Parcelable kullanın.
  • Dosya açma/paylaşma: intent.setType("image/*").setAction(Intent.ACTION_SEND) ve manifest'te mimeType içeren intent-filter'lar.
  • Veritabanı ve UI ile çalışma: DAO'dan Flow döndürün, UI'da reaktif güncelleme için collectAsState/collect kullanın.
  • Kaynaklar: Tekrarlayan dizeleri string-array içinde gruplayın, ölçeklenebilirlik için vector drawable kullanın.

Parcelable ve Serializable Karşılaştırması

Nesne aktarımında seçim yapmak için karşılaştırma

TürHızBoyutÖneri
ParcelableYüksek (yansıma yok)KompaktIntent/Binder için, Kotlin'de @Parcelize
SerializableDüşük (yansıma)Daha büyükSadece basit, nadiren aktarılan nesneler için

Büyük bitmap/dizileri Intent üzerinden aktarmayın — bunun yerine dosya/URI (SAF) veya SharedViewModel kullanmak daha iyidir.

Sık yapılan hatalar

  • Performans kritik alanlarda Serializable yerine Parcelable kullanmamak.
  • Büyük nesneleri Intent üzerinden aktarmak ve OOM almak.
  • Raw türlerden (Object) dönüşüm yapmak ve unchecked-cast kullanmak — ClassCastException'a yol açar.
  • Android 12+ üzerinde genel bileşenler için manifest'te exported özelliğinin eksik olması.

SSS

  • Parcelable'ı her zaman manuel olarak yazmak gerekir mi?
    • Hayır. Kotlin'de sınıf basitse ve özel mantık gerektirmiyorsa @Parcelize kullanın.
    • Ne zaman intent-filter'da MIME kullanmalıyım?
    • Uygulamanın dosyaları veya dış bağlantıları formatlarına göre açması/işlemesi gerektiğinde.
  • Android için Flow, RxJava'dan neden daha iyidir?
    • Daha az boilerplate kod, Kotlin Coroutines ve lifecycle-aware API'lerle daha iyi entegrasyon.

Özetle: İlkel ve referans verileri net bir şekilde ayırarak başlayın, aktarım için Parcelable/@Parcelize, dosya işlemleri için MIME, asenkron mantık için ise Flow/StateFlow kullanın. Bu yaklaşım uygulamanızın performansını ve kararlılığını hemen artıracaktır.