Android Profiler, Android Studio'ya entegre edilmiş, uygulamaların performansını gerçek zamanlı olarak izlemek için bir araç setidir. CPU yükünü, bellek tüketimini, ağ trafiğini ve enerji tüketimini üçüncü taraf kütüphaneler kurmadan takip etmenizi sağlar. Android Developers'a göre, profil oluşturucu doğrudan IDE'ye entegre edilmiştir ve bağlı cihazdaki herhangi bir işlem için milisaniye hassasiyetinde metrikler sağlar.
Ana Noktalar
Android Profiler, eski Android Monitor ve DDMS'nin yerini alan Android Studio'nun bir bileşenidir. Uygulamanın tüm yönlerini profillemek için birleşik bir arayüz sağlar: CPU Profiler işlemci analizi için, Memory Profiler bellek işlemleri için, Network Profiler ağ istekleri için ve Energy Profiler enerji tüketimi için. Android Studio üzerinden uygulama başlatıldığında veriler otomatik olarak toplanır.
Profil oluşturucu hem öykünücüde hem de USB ile bağlı fiziksel cihazda çalışır. Google I/O 2023'e göre, Android Profiler Android projelerinin %70'inden fazlasında kullanılmaktadır ve performans teşhisi için standart araç olarak kabul edilmektedir. Üçüncü taraf çözümlere göre ana avantajı sıfır entegrasyondur: build.gradle'a bağımlılık eklemek veya uygulama kodunu değiştirmek gerekmez.
Android Profiler'ın mimarisi Perfetto'ya dayanır — çekirdek ve uygulama seviyesinde veri toplayan Android sistem izleyicisi. Perfetto minimum ek yük (CPU'nun %1'inden az) sağlar ve 30 dakikaya kadar uzun süreli kaydı destekler. Bu, yalnızca hızlı işlemleri değil, aynı zamanda uzun senaryoları da profillemeye olanak tanır — ekran geçişleri, arka plan senkronizasyonu, bir saatlik kullanım boyunca bellek tüketimi.
Profil oluşturucu dört tür veri toplar: CPU — her çekirdek ve iş parçacığının yükü, Memory — Java Heap, Native Heap, Stack, Graphics, Network — tüm gelen ve giden istekler, Energy — enerji tüketimi kategorileri (Idle, Light, Medium, Heavy). Veriler zaman çizelgesinde senkronize edilir — CPU değişikliğinin Bellek ve enerji tüketimini nasıl etkilediğini aynı anda görebilirsiniz.
CPU Profiler, zaman çizelgesinde gerçek zamanlı olarak işlemci yükünü gösterir ve uygulamanın iş parçacıklarına göre böler. Her iş parçacığı renkli bir çizgi veya alanla temsil edilir — alan ne kadar genişse, iş parçacığı o kadar fazla işlemci süresi kaplar. Kırmızı alanlar uygulama çalışması, mavi — sistem çağrıları, gri — bekleme anlamına gelir.
Ayrıntılı analiz için CPU Profiler üç kayıt modunu destekler: Trace Java Methods (tüm Java yöntemlerinin izlenmesi), Trace C/C++ Functions (NDK yerel işlevlerinin izlenmesi) ve Sample Java Methods (örnekleme, önerilen mod). Örnekleme en düşük ek yükü sağlar ve günlük profil oluşturma için uygundur, tam izleme ise karmaşık sorunları bulmak için kullanılır.
// Örnek: CPU Profiler analizi bu yöntemi darboğaz olarak gösterecek
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler, inBackgroundThread'te yüksek CPU yükü gösterecek
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Profil oluşturma sonrası öneri:
// computeHeavyTransformation zamanın %80'ini alıyor — sonucu önbelleğe alıyoruz
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
Kayıttan sonra CPU Profiler, Top-Down Tree'yi gösterir — her yöntemin yürütme süresini içeren bir çağrı ağacı. Self Time/Total sütununa dikkat edin: bir yöntemin Self Time değeri 16 ms'den büyükse ve UI iş parçacığından çağrılıyorsa — garantili kare düşüşü vardır. Çözüm, ağır hesaplamaları Dispatchers.IO veya Default aracılığıyla arka plan iş parçacığına taşımaktır.
Sample Java Methods — %3–5 ek yük ile günlük profil oluşturma için önerilen mod. Trace Java Methods — her çağrının tam izlenmesi, %15'e kadar ek yük, kısa kayıtlar (5–10 saniye) için kullanılır. Trace C/C++ Functions — Linux Perf aracılığıyla NDK kodu izleme, oyunlar ve C++ kütüphanelerinin analizi için vazgeçilmezdir. Sorun türüne göre modları değiştirin.
Memory Profiler, uygulamanın tüm bellek kategorilerini izler: Java Heap (JVM nesneleri), Native Heap (JNI aracılığıyla C/C++ tahsisleri), Stack (iş parçacığı yığınları) ve Graphics (dokular, GPU arabellekleri). Ana görselleştirme, her kategorinin kendi renginde gösterildiği bellek tüketiminin zaman grafiğidir. Grafik çöp toplamadan sonra düşmezse — sızıntıdan şüphelenin.
Sızıntıları bulmak için Capture Heap Dump işlevini kullanın. Dump anında, Android Profiler uygulamayı ~100 ms boyunca durdurur ve bir HPROF dosyası oluşturur — Java Heap'teki tüm canlı nesnelerin tam anlık görüntüsü. Dump'ı açtıktan sonra nesneleri Retained Size'a (nesne kaldırıldığında serbest kalacak bellek miktarı) göre sıralayabilir ve yok edilmesi gereken Activity, Fragment veya Bitmap örneklerini arayabilirsiniz.
Google I/O 2022'ye göre, Memory Profiler ve LeakCanary kombinasyonu Android'de bellek sızıntısı tespit senaryolarının %95'ini kapsar. LeakCanary otomatik olarak çalışır — arka planda sızıntıları tespit eder. Memory Profiler manuel analiz için gereklidir: yalnızca sızıntıları değil, tahsislerin tam resmini görürsünüz.
| Bellek kategorisi | Açıklama | Tipik boyut |
|---|---|---|
| Java Heap | JVM yığını: Kotlin/Java nesneleri | 5–200 MB |
| Native Heap | JNI, NDK aracılığıyla tahsisler | 1–100 MB |
| Graphics | Dokular, GPU arabellekleri | 10–200 MB |
| Stack | Tüm iş parçacıklarının yığını | 1–10 MB |
Dump'ı yakaladıktan sonra nesneleri Retained Size'a göre sıralayın — bu, nesne kaldırıldığında serbest kalacak bellek miktarıdır. Bellekte olmaması gereken büyük Retained Size'a sahip Activity, Fragment ve Bitmap örneklerini arayın. Nesneyi tutan referans zincirini görmek için Reference Tree sekmesine gidin — genellikle bu bir singleton'ın statik alanı veya temizlenmemiş bir callback'tir. Önemli bir metrik tahsis oranıdır (saniyedeki tahsis sayısı). Tahsis oranı 10.000 nesne/saniyeyi aşarsa, uygulama geçici nesneleri oluşturma ve kaldırma için çok fazla zaman harcar, bu da GC'yi yükler ve mikro donmalara neden olur. Bu durumda View Inspector aracını kullanın ve döngülerde sık nesne oluşturulan yerleri bulun.
Network Profiler, zaman çizelgesinde uygulamanın tüm ağ isteklerini gerçek zamanlı olarak görüntüler. Her istek yatay bir çubuk olarak gösterilir — uzunluğu yürütme süresine, rengi ise istek türüne (GET, POST, PUT, DELETE) karşılık gelir. Ölçeği kaydırarak isteklerin zaman içinde nasıl dağıldığını ve tekrarlanıp tekrarlanmadığını görebilirsiniz.
Tüm popüler kütüphaneler desteklenir: OkHttp, Retrofit, Volley, Ktor. Ktor ve OkHttp için profil oluşturucu, interceptors ve dönüştürücüler dahil tam çağrı yığınını gösterir. Her istek için İstek Başlıkları ve Yanıt Başlıkları, yanıt gövdesi (1 MB'a kadar), durum kodu ve süre mevcuttur.
Network Profiler tarafından tespit edilen tipik sorunlar: önbellek eksikliği (aynı URL her açılışta istenir), yinelenen istekler (iki bileşen aynı anda aynı verileri yükler), aşırı yanıt boyutu (sunucu 50 KB gerekirken 5 MB gönderir). Network Profiler, zaman çizelgesine tek bir bakışla bu sorunları görmeye yardımcı olur.
Yavaş ağları simüle etmek için Android Studio'da Network Conditioning'i kullanın — bant genişliğini 3G/2G ile sınırlamanıza ve gecikme eklemenize olanak tanır. Bu, özellikle istikrarsız interneti olan bölgelerde çalışan uygulamalar için kötü ağ koşullarında davranış testi açısından kritik öneme sahiptir.
Energy Profiler, Perfetto verilerine dayanarak uygulamanın pil üzerindeki etkisini değerlendirir. Araç, miliamper cinsinden gerçek tüketimi ölçmez, her işlemi beş enerji tüketimi kategorisinden birine sınıflandırır: Idle, Light, Medium, High ve Overloaded. Energy Profiler'ın zaman çizelgesi renkle vurgulanır: yeşil (hafif yük), sarı (orta), kırmızı (yüksek).
Kırmızı bölgelerin ana nedenleri: WakeLock (uygulama işlemciyi aktif tutar), Konum GPS (yüksek hassasiyetle sürekli koordinat istekleri), Keep-Alive bağlantıları (sunucuyla sık veri alışverişi), büyük veri aktarımları (dosya gönderme, akış). Energy Profiler, hangi işlemin hangi anda enerji tüketimi zirvesine neden olduğunu tam olarak gösterir.
Android Developers'a göre, tipik bir uygulama High kategorisinde zamanın %5'inden fazlasını geçirmemelidir. Energy Profiler, profil oluşturma süresinin %10'undan fazlasını kırmızı bölgeler olarak gösteriyorsa — uygulama Pil Tüketimi kriterine göre incelemeyi geçemez. Öneri — arka plan görevleri için WorkManager kullanın, Konum isteklerini minimum gerekli hassasiyetle sınırlayın ve ağ isteklerini gruplar halinde birleştirin.
Android Profiler'ı başlatmak tek tıklamayla olur: Android Studio'da View → Tool Windows → Profiler'ı açın veya sağ paneldeki Profiler simgesine çift tıklayın. Bağlı cihazda uygulamayı başlattıktan sonra, Android Studio otomatik olarak işleme bağlanacak ve veri toplamaya başlayacaktır. Zaman çizelgesinde CPU, Memory, Network ve Energy grafikleri hemen görünecektir.
Ayrıntılı analiz için istediğiniz sekmeyi (CPU, Memory, Network veya Energy) seçin ve kaydı başlatın. CPU için 30 saniye kayıt süresiyle Sample Java Methods modunu öneririm — tipik bir senaryo için yeterlidir. Memory için — senaryo yürütüldükten sonra yığın dökümü (Capture Heap Dump). Network için kayıt otomatik olarak başlar, senaryo tamamlandıktan sonra Stop düğmesine basmanız yeterlidir.
Kaydı durdurduktan sonra verileri dışa aktarın: File → Save As tüm oturumu .perf dosyasına kaydeder. Bu, optimizasyon öncesi ve sonrası metrikleri karşılaştırmak için kullanışlıdır. İlk kararlı sürümde bir temel oturumu oluşturun ve her yeni oturumu bununla karşılaştırın — performans değişikliklerini nesnel olarak değerlendirmenin tek yolu budur.
Android Profiler, Android Studio CLI ve Firebase Test Lab aracılığıyla komut satırından çalıştırılabilir. Firebase Test Lab, UI testlerinin bir parçası olarak performans profil oluşturmayı destekler: test sonucuyla birlikte CPU, Memory ve Network metriklerini alırsınız. Metrikler temel değere göre %10 düştüğünde CI hattı geliştirici tarafından kontrol edilene kadar bloke edilecek şekilde hattı yapılandırın.
Sıkça Sorulan Sorular
Etki minimumdur. Android Profiler, veri toplama için CPU'nun %1'inden az ek yük ekleyen Perfetto'yu kullanır. Sample Java Methods modunda ek yük yaklaşık %3–5'tir ve senaryo profilleme için önemsizdir. Yöntemlerin tam izlenmesi %15'e kadar ek yük verebilir, bu nedenle yalnızca kısa kayıtlar için kullanılır.
Evet, sistem izleri Perfetto CLI aracılığıyla doğrudan cihazdan kaydedilebilir: adb shell perfetto --out /data/local/tmp/trace.perf. Ardından dosyayı Perfetto UI (ui.perfetto.dev) arayüzünde açın veya uygulamanın tam işaretlemesiyle görüntülemek için Android Studio'ya aktarın.
Android Profiler, proxy yapılandırması gerektirmeyen bir sistem aracıdır. İstekleri doğrudan IDE'de performans bağlamında gösterir. Charles Proxy, daha ayrıntılı analiz (trafik yakalama, istek değiştirme, yeniden gönderme) sağlayan harici bir proxy sunucusudur. Performans profilleme için Android Profiler'ı, API sözleşmeleri analizi için Charles'ı kullanın.
Senaryoyu yürütmeden önce yığın dökümü alın (örneğin, Activity'yi açmadan önce). Senaryoyu yürütün — Activity'yi açın ve kapatın. İkinci bir döküm alın. Canlı Activity örneklerinin sayısını karşılaştırın: ikinci dökümde daha fazla varsa — sızıntı. Retained Size'a göre sıralayın, ek Activity'leri bulun ve nedenini belirlemek için Reference Tree'ye bakın.
Energy Profiler, cihaz düzeyinde Güç Profilleri desteği ve Android 8.0+ gerektirir. Öykünücülerde ve bazı üretici yazılımlarında (özellikle Çin'de) veriler mevcut olmayabilir. Çözüm — saf Android üretici yazılımına sahip Pixel veya Samsung referans cihazlarında enerji tüketimini profilleyin.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun