Mobil Uygulama Performans Optimizasyonu 2026: Başlatma Süresi ve Pil Tüketimi

Bir mobil uygulamanın başarısını belirleyen en kritik iki performans metriği başlatma süresi ve pil tüketimidir; çünkü kullanıcılar yavaş açılan ve telefonu ısıtan uygulamaları sessizce siler. Doğrudan yanıt: 2026’da kabul edilen hedef, soğuk başlatmada ilk karenin 5 saniyenin altında (Google’ın kötü eşiği), ideal olarak 1,5 saniyenin altında olması; pil tarafında ise uygulamanın arka planda gereksiz uyanma (wakelock) ve ağ yoklamasından kaçınmasıdır. Google’ın verilerine göre başlatma süresi 1 saniye arttığında dönüşüm oranı %20’ye kadar düşer ve Android Vitals’ta “yavaş soğuk başlatma” eşiği 5 saniyedir. Optimizasyonun üç ana cephesi vardır: başlatma yolundaki gereksiz işi kaldırmak (lazy init, baseline profiles), render maliyetini düşürmek (jank ve overdraw azaltma) ve enerji bütçesini yönetmek (WorkManager batching, wakelock disiplini). Doğru ölçümle bu üç cephe sistematik iyileştirilir.

Mobil uygulama performans optimizasyonu üç cephesi: başlatma süresi, render akıcılığı ve pil tüketimi diyagramı
Mobil uygulama performans optimizasyonu üç cephesi: başlatma süresi, render akıcılığı ve pil tüketimi diyagramı

Başlatma Süresi: Soğuk, Sıcak ve Ilık Başlatma

Başlatma performansı üç tipte ölçülür ve her biri farklı optimizasyon gerektirir. Soğuk başlatma (cold start) uygulama tamamen kapalıyken açılır ve en pahalı olanıdır: süreç oluşturma, Application.onCreate, ilk Activity ve ilk kare çizimi tamamı buna dahildir. Sıcak başlatma (warm start) süreç hâlâ bellekteyken, ılık başlatma ise arada bir noktadadır. Google’ın Android Vitals eşikleri nettir: soğuk başlatma 5 saniye, sıcak başlatma 2 saniye, ılık başlatma 1,5 saniyenin altında olmalıdır.

2026’nın en etkili tekniği Baseline Profiles‘tır. Google’ın açıkladığına göre, kritik kullanıcı yollarını önceden derlenmiş (AOT) profillere bağlayan Baseline Profiles, soğuk başlatmayı ortalama %30, bazı uygulamalarda %40’a kadar hızlandırır. Tekniklerin kapsamlı bir referansı için mobil uygulama performans optimizasyonu yazısı temel teşkil eder.

  • Soğuk başlatma hedefi: <1,5 sn ideal, <5 sn Google kötü eşiği.
  • Baseline Profiles kazancı: %30-40 başlatma hızlanması.
  • App Startup kütüphanesi: ContentProvider çoğalmasını tek başlatıcıda toplar.

Üç başlatma tipinin farkını net kavramak, doğru metriği hedeflemek için şarttır; bir uygulamanın “yavaş açılıyor” algısı çoğu zaman soğuk başlatmadan kaynaklanır, çünkü kullanıcı uygulamayı ilk kez veya uzun aradan sonra açtığında bu yolu deneyimler. Aşağıdaki tablo üç tipi ve Google’ın Android Vitals eşiklerini karşılaştırır.

Başlatma Tipi Durum Yapılan İş İdeal Kötü Eşik
Soğuk (cold) Süreç kapalı Süreç + onCreate + ilk kare <1,5 sn >5 sn
Ilık (warm) Kısmen bellekte Activity yeniden oluşturma <1 sn >2 sn
Sıcak (hot) Süreç bellekte Activity öne getirme <0,5 sn >1,5 sn
İlk kare (TTID) İlk çizim Görünür içeriğe kadar Düşük Yavaş algı
Tam görünür (TTFD) Veri yüklü Kullanılabilir ekran Düşük İçerik gecikmesi

Başlatma Yolunu Hafifletme Teknikleri

Başlatma yolu (startup path) optimizasyonunun özü, ilk kareye kadar yapılan işi minimuma indirmektir. En sık görülen hata, tüm SDK’ların (analitik, crash reporting, reklam) Application.onCreate içinde senkron başlatılmasıdır; bu, ilk karenin gecikmesine yol açar. Jetpack App Startup kütüphanesi, her SDK’nın kendi ContentProvider’ını kaydetmesini engelleyerek başlatma ek yükünü tek noktada toplar.

Mobil başlatma yolu optimizasyonu: Baseline Profiles ve lazy init ile ilk kareye kadar yapılan işin azaltılması
Mobil başlatma yolu optimizasyonu: Baseline Profiles ve lazy init ile ilk kareye kadar yapılan işin azaltılması

Tembel başlatma (lazy initialization) ile yalnızca ilk ekranda gereken bileşenler yüklenir, gerisi ertelenir. Flutter ve KMP gibi çapraz platform yapılarda framework başlatma ek yükü de hesaba katılmalıdır; bu konuda Kotlin Multiplatform vs Flutter karşılaştırması framework-özel başlatma maliyetlerini ele alır. Ölçüm tarafında Macrobenchmark kütüphanesi, başlatmayı CI/CD’de regresyona karşı izlemeyi sağlar. Bir başka kritik nokta, splash ekranı API’sinin doğru kullanımıdır: özel splash Activity’leri başlatma yoluna gereksiz adım eklerken, Android 12+ SplashScreen API’si bu geçişi sistem seviyesinde optimize eder.

Pil Tüketimi: Enerji Bütçesinin Yönetimi

Pil optimizasyonu, kullanıcının “bu uygulama pilimi bitiriyor” algısını engellemekle ilgilidir; Android’in Battery Historian ve iOS’un Energy Log araçları bu profili çıkarır. En büyük enerji tüketicileri sırayla: ekran (parlaklık ve render), hücresel/Wi-Fi radyo, GPS/konum ve CPU/wakelock’lardır. Google’ın araştırmasına göre kötü yönetilen arka plan işleri ve sık ağ yoklaması, pil tüketiminin önde gelen sebebidir.

2026’da en kritik disiplin arka plan işi yönetimidir. WorkManager, işleri toplayıp (batching) cihaz şarjdayken veya Wi-Fi’deyken çalıştırarak radyo uyanmalarını azaltır. Android’in Doze modu ve App Standby, uygulamaları periyodik bakım pencerelerine zorlar. Konum servisi en pahalı tüketicilerden biridir: sürekli GPS yerine fused location ve uygun doğruluk seviyesi seçmek tüketimi belirgin düşürür. Radyo uyanmalarının pil üzerindeki etkisi sıklıkla hafife alınır; hücresel modem, bir veri aktarımı sonrası “tail time” boyunca yüksek güç durumunda kalır, bu yüzden çok sayıda küçük istek tek bir toplu istekten çok daha fazla pil tüketir.

Enerji bütçesini doğru yönetmek için, hangi bileşenin ne kadar tükettiğini ve doğru azaltma stratejisini bilmek gerekir. Aşağıdaki tablo başlıca pil tüketicilerini, göreli etkilerini ve doğrulanmış azaltma yöntemlerini özetler.

Tüketici Göreli Etki Tipik Sorun Azaltma Yöntemi
Ekran En yüksek Parlaklık + sürekli render Karanlık tema, render azalt
Hücresel/Wi-Fi radyo Yüksek Sık küçük istek (tail time) İstekleri toplama (batching)
GPS / konum Yüksek Sürekli yüksek doğruluk Fused location, geofencing
CPU / wakelock Orta-Yüksek Serbest bırakılmayan kilit WorkManager constraint
Arka plan işi Orta Toplanmamış çalıştırma Doze, batch, şarjda çalıştır
Sensör/kamera Değişken Açık bırakılan oturum Yaşam döngüsünde kapatma

Performans Hedefleri ve Eşikler Tablosu

Metrik İdeal Kabul Edilebilir Kötü (Google eşiği) Ölçüm Aracı
Soğuk başlatma <1,5 sn 1,5-3 sn >5 sn Android Vitals
Sıcak başlatma <0,5 sn 0,5-1,5 sn >2 sn Macrobenchmark
Yavaş kare (jank) <%1 %1-5 >%5 Frame Timeline
Donmuş kare (>700 ms) <%0,1 %0,1-0,5 >%0,5 Android Vitals
Arka plan pil tüketimi Minimal Orta “Aşırı” Battery Historian
Uygulama boyutu <50 MB 50-150 MB >200 MB APK Analyzer
Mobil performans eşik panosu: soğuk başlatma, jank ve donmuş kare metriklerinin görselleştirilmesi
Mobil performans eşik panosu: soğuk başlatma, jank ve donmuş kare metriklerinin görselleştirilmesi

Render Performansı: Jank ve Overdraw Azaltma

Akıcılık (smoothness), kullanıcının uygulamayı “hızlı” hissetmesinin temelidir. 60 Hz ekranda her karenin 16,6 ms, 120 Hz ekranda 8,3 ms içinde çizilmesi gerekir; bu süre aşıldığında “jank” (takılma) oluşur. Android Vitals, karelerin %5’inden fazlası yavaşsa uygulamayı işaretler. En yaygın jank kaynakları: ana iş parçacığında ağır işlem, aşırı çizim (overdraw), karmaşık layout hiyerarşisi ve büyük bitmap dekodlamadır.

Çözüm cephaneliği: ağır işi arka plan iş parçacığına (coroutine/dispatcher) taşımak, RecyclerView/LazyColumn ile görünüm geri dönüşümü, görsel önbellekleme (Coil/Glide) ve overdraw’ı GPU profiling ile tespit etmektir. Compose tarafında gereksiz recomposition’ı önlemek için stable parametreler ve derived state kullanılır. Performans bütçesi mimariyle de ilgilidir; BFF deseni ile ağ yükünü azaltmak istemci render maliyetini de düşürür.

120 Hz ekranların yaygınlaşması, jank bütçesini daha da daralttı: 60 Hz’de bir kare için 16,6 ms varken, 120 Hz’de bu süre 8,3 ms’ye iner ve aynı işlem yarı sürede tamamlanmak zorundadır. Bu yüzden yüksek yenileme hızlı cihazlarda akıcılık daha hassas bir mühendislik konusu haline gelir; bir liste kaydırma sırasında ana iş parçacığında yapılan küçük bir senkron iş bile fark edilir takılmaya yol açabilir. Android’in Frame Timeline aracı, hangi karelerin bütçeyi aştığını ve nedenini (uzun ölçüm, çizim veya GPU bekleme) ayrıştırarak gösterir; bu sayede optimizasyon tahmin yerine veriyle yönlendirilir. Pratikte en yüksek getirili kural değişmez: kullanıcı etkileşimi sırasında ana iş parçacığında hiçbir disk, ağ veya ağır hesaplama işi yapılmamalı, hepsi arka plana taşınmalıdır.

Render zincirinde sık göz ardı edilen bir maliyet de listelerin başlangıç performansıdır. Bir RecyclerView veya LazyColumn ilk açıldığında, görünür öğeleri oluşturmak için yapılan layout ve measure işlemleri ana iş parçacığını meşgul eder; her öğe için 16,6 ms bütçesinin aşılması ilk kaydırmada belirgin takılma yaratır. Çözüm, öğe düzenlerini düz (flat) tutmak, iç içe ağırlıklı (nested weighted) LinearLayout’lardan kaçınmak ve ConstraintLayout ile derinliği azaltmaktır. Compose’da ise her öğeye stabil bir key vermek, kaydırma sırasında gereksiz yeniden oluşturmayı engeller ve liste akıcılığını %20-30 artırabilir.

Ölçüm ve İzleme: Veri Olmadan Optimizasyon Yok

Optimizasyonun ilk kuralı: tahmin etme, ölç. Android Studio Profiler (CPU, bellek, enerji), Perfetto/systrace (sistem geneli trace), Macrobenchmark (CI’da başlatma/jank ölçümü) ve Firebase Performance Monitoring (saha verisi) temel araçlardır. iOS tarafında Instruments (Time Profiler, Energy Log) eşdeğer rolü üstlenir. Laboratuvar ölçümü ile saha (field) verisi arasındaki farkı kavramak kritiktir: geliştirici cihazı genellikle üst segmenttir ve gerçek kullanıcı tabanının önemli bir bölümü 2-4 GB RAM’li, eski yonga setli cihazlar kullanır. Bu yüzden Android Vitals’taki gerçek kullanıcı yüzdelik dilimleri (p90, p99), tek bir test cihazındaki ölçümden çok daha güvenilir bir gerçeklik sunar. Aşağıdaki tablo optimizasyon tekniklerinin tipik kazançlarını özetler.

Teknik Hedef Metrik Tipik Kazanç Uygulama Zorluğu
Baseline Profiles Soğuk başlatma %30-40 hızlanma Düşük
Lazy / App Startup init Başlatma yolu %15-25 hızlanma Orta
WorkManager batching Pil (arka plan) %20-40 az tüketim Orta
Overdraw / layout düzeltme Jank %10-30 daha az takılma Orta
R8 / kod küçültme Uygulama boyutu %20-50 küçülme Düşük
Görsel önbellek (Coil/Glide) Bellek + render %15-25 az bellek Düşük
Mobil render performansı: jank ve overdraw azaltma teknikleriyle kare bütçesi grafiği
Mobil render performansı: jank ve overdraw azaltma teknikleriyle kare bütçesi grafiği

Tipik Sorunlar ve Çözümleri

Performans projelerinde ekipler genellikle aynı hatalara düşer; çoğu, ölçüm yerine tahmine dayanmaktan kaynaklanır. En sık karşılaşılan sorunlar ve çözümleri şunlardır:

  • SDK’ları senkron başlatma: Tüm kütüphaneler onCreate’te yüklenir, başlatma uzar. Çözüm: App Startup + lazy init ile erteleme.
  • Ana iş parçacığında ağ/disk: ANR ve jank kaynağı. Çözüm: Coroutine/Dispatchers.IO ile arka plana taşıma.
  • Wakelock sızıntısı: Serbest bırakılmayan wakelock pili bitirir. Çözüm: WorkManager constraint’leri ve wakelock denetimi.
  • Sürekli yüksek doğruluk GPS: Konum servisi pili hızla tüketir. Çözüm: Fused location, gerekli doğruluk seviyesi, geofencing.
  • Aşırı recomposition (Compose): Gereksiz yeniden çizim CPU yakar. Çözüm: Stable tipler, key kullanımı, derivedStateOf.
  • Optimize edilmemiş görseller: Büyük bitmap’ler bellek ve render maliyeti çıkarır. Çözüm: WebP/AVIF, doğru boyutlandırma, önbellekleme.

Sonuç

2026’da mobil performans optimizasyonu bir lüks değil, kullanıcı tutma ve dönüşümün doğrudan belirleyicisidir; 1 saniyelik başlatma gecikmesi dönüşümü %20’ye kadar düşürür. Strateji üç cephede yürütülür: başlatma yolunu Baseline Profiles ve lazy init ile hafifletmek, render’ı jank/overdraw azaltarak akıcı tutmak ve pili WorkManager disipliniyle korumak. Hiçbir teknik ölçüm olmadan uygulanmamalıdır. Pratik tavsiye: Önce Android Vitals ve Macrobenchmark ile mevcut soğuk başlatma ve jank yüzdenizi temel alın; en yüksek etkili tek değişiklik olan Baseline Profiles’ı ekleyip ölçün, ardından sadece veriyle kanıtlanan darboğazları sırayla giderin.

Sıkça Sorulan Sorular

Soğuk başlatma süresini en hızlı nasıl iyileştiririm?

En yüksek getirili tek değişiklik Baseline Profiles eklemektir; Google verilerine göre soğuk başlatmayı %30-40 hızlandırır ve uygulama tarafında kod değişikliği gerektirmez. İkinci adım, Application.onCreate içinde senkron başlatılan SDK’ları Jetpack App Startup ve lazy initialization ile ertelemektir. Bu iki teknik birlikte uygulandığında, ilk karenin ekrana gelme süresi çoğu uygulamada belirgin şekilde kısalır.

Hangi araçlarla mobil performansı ölçmeliyim?

Geliştirme sırasında Android Studio Profiler (CPU/bellek/enerji) ve Perfetto trace; CI/CD’de regresyon yakalamak için Macrobenchmark; sahadaki gerçek kullanıcı verisi için Android Vitals ve Firebase Performance Monitoring kullanılır. iOS tarafında Xcode Instruments (Time Profiler ve Energy Log) eşdeğerdir. Kural net: optimizasyona başlamadan önce mutlaka bir temel ölçüm (baseline) alın, aksi halde iyileştirmenin etkisini kanıtlayamazsınız.

Uygulamamın pil tüketimini en çok ne artırır?

En büyük tüketiciler sırayla ekran (parlaklık ve render), hücresel/Wi-Fi radyo uyanmaları, sürekli yüksek doğruluk GPS ve serbest bırakılmayan wakelock’lardır. Pratikte en sık görülen sorun, arka plan işlerinin toplanmadan tek tek çalıştırılarak radyoyu sürekli uyandırmasıdır. WorkManager ile işleri batch’leyip cihaz şarjda veya Wi-Fi’deyken çalıştırmak ve fused location kullanmak tüketimi %20-40 azaltır.

Jank (takılma) neden olur ve nasıl önlenir?

Jank, bir karenin ekran yenileme bütçesi içinde (60 Hz’de 16,6 ms, 120 Hz’de 8,3 ms) çizilememesidir. Başlıca sebepleri ana iş parçacığında ağır işlem yapmak, aşırı çizim (overdraw), derin layout hiyerarşisi ve büyük görsel dekodlamadır. Önlemek için ağır işi coroutine ile arka plana taşıyın, liste görünümlerinde geri dönüşüm (RecyclerView/LazyColumn) kullanın, overdraw’ı GPU profiling ile tespit edin ve Compose’da gereksiz recomposition’ı stable tiplerle engelleyin.

Uygulama boyutu performansı etkiler mi?

Evet, hem dolaylı hem doğrudan. Büyük APK/AAB dosyaları indirme ve kurulum oranını düşürür; Google verileri her 6 MB artışın kurulum dönüşümünü ölçülebilir biçimde azalttığını gösterir. Ayrıca büyük uygulamalar daha fazla bellek ve disk kullanır. R8 ile kod küçültme, kullanılmayan kaynakların temizlenmesi, App Bundle ile cihaza özel teslimat ve WebP/AVIF görseller boyutu %20-50 azaltarak hem dönüşümü hem çalışma zamanı performansını iyileştirir.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Haziran 14, 2026

    Müşterilerime hep aynı şeyi söylüyorum: tahmin etme, ölç. Optimizasyona başlamadan önce Android Vitals ve Macrobenchmark ile mevcut soğuk başlatma ve jank yüzdeni temel al. En yüksek getirili tek hamle Baseline Profiles; kod hiç değişmeden başlatmayı %30-40 hızlandırır, hemen ekle ve etkisini ölç. Sonra yalnızca veriyle kanıtlanan darboğazları sırayla gider. Pil tarafında en sık görülen hata arka plan işlerini batch’lemeden tek tek çalıştırmak; WorkManager constraint’leriyle gereksiz radyo uyanmalarını kes.

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir