İzler, bir performans sorununu ilk kez incelerken genellikle en iyi bilgi kaynağıdır. Bu araçlar, sorunun ne olduğuna ve aramaya nereden başlayacağınıza dair bir hipotez oluşturmanıza olanak tanır.
Android'de iki izleme düzeyi desteklenir: sistem izleme ve yöntem izleme.
Sistem izleme yalnızca izleme için özel olarak işaretlenmiş alanları izlediğinden düşük ek yüke sahiptir ve uygulamanızın performansını büyük ölçüde etkilemez. Sistem izleme, kodunuzun belirli bölümlerinin ne kadar sürede çalıştığını görmek için idealdir.
Yöntem izleme, uygulamanızdaki her işlev çağrısını izler. Bu işlem çok maliyetli olduğundan uygulamanızın performansını büyük ölçüde etkiler ancak size neler olduğu, hangi işlevlerin çağrıldığı ve ne sıklıkta çağrıldığı hakkında eksiksiz bir resim sunar.
Varsayılan olarak, sistem izleri tek tek oluşturulabilir işlevleri içermez. Bu bilgiler, yöntem izlerinde kullanılabilir.
Bileşim izleme, sistem izlemelerindeki composable işlevleri gösterir. Bu özellik, sistem izleme sayesinde düşük düzeyde müdahale sağlar ve yöntem izleme, kompozisyonda ayrıntı düzeyleri sunar.
Bileşim izleme ayarları
Projenizde yeniden oluşturma izlemeyi denemek için en azından aşağıdaki sürümlere güncellemeniz gerekir:
- Android Studio Flamingo
- Compose kullanıcı arayüzü: 1.3.0
- Compose Compiler: 1.3.0
İzlemenizi çalıştırdığınız cihaz veya emülatör de en az API düzeyi 30 olmalıdır.
Ayrıca, Compose Runtime Tracing'e yeni bir bağımlılık eklemeniz gerekir:
implementation("androidx.compose.runtime:runtime-tracing:1.8.1")
BOM oluşturma'yı kullanıyorsanız sürümü belirtmeniz gerekmez:
val composeBom = platform("androidx.compose:compose-bom:2025.05.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Bu bağımlılık sayesinde, yeniden oluşturmayı içeren bir sistem izi aldığınızda composable işlevleri otomatik olarak görebilirsiniz.
Sistem izleme kaydı alma
Sistem izi almak ve yeni yeniden oluşturma izlemeyi görmek için aşağıdaki adımları uygulayın:
Profiler'ı açın:
2. Şekil. Android Studio - Start Profiling CPU zaman çizelgesi'ni tıklayın.
3. Şekil. Android Studio Profiler - CPU zaman çizelgesi Uygulamanızda izlemek istediğiniz kullanıcı arayüzüne gidin, ardından System Trace ve Record'u (Kaydet) seçin.
4. Şekil. İzleme seçenekleri - Sistem izleme Yeniden oluşturmaya neden olmak ve kaydı durdurmak için uygulamanızı kullanın. İzleme işlenip göründükten sonra, yeniden oluşturma izinde composable'ları görebilirsiniz. İzde yakınlaştırma ve kaydırma yapmak için klavye ve fareyi kullanabilirsiniz. İzde gezinme konusunda bilginiz yoksa İz kaydetme dokümanına bakın.
5. Şekil. Sistem izleme Grafikteki bir composable'ı çift tıkladığınızda kaynak koduna yönlendirilirsiniz.
Ayrıca, dosya ve satır numarasıyla birlikte Flame Chart'ta composable'ları da görebilirsiniz:
Şekil 6. Flame grafiği
Uyarılar
APK boyutu ek yükü
Özelliğin ek yükünü mümkün olduğunca azaltmayı amaçlasak da Compose derleyicisi tarafından APK'ya yerleştirilen izleme dizelerinden kaynaklanan Compose uygulamalarında APK boyutu artışı söz konusudur. Uygulamanızda çok fazla Compose kullanılmıyorsa bu boyut artışı nispeten küçük olabilir. Tamamen Compose ile geliştirilen uygulamalarda ise daha büyük olabilir. Bu izleme dizeleri, daha önce gösterildiği gibi izleme araçlarında görünebilmeleri için ek olarak karartılmamıştır. Compose derleyicisi, 1.3.0 sürümünden itibaren bu öğeleri tüm uygulamalara yerleştirir.
Aşağıdaki ProGuard kuralını ekleyerek izleme dizelerini üretim derlemenizden kaldırabilirsiniz:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Bu işlevler gelecekte değişebilir ancak değişiklikler Compose sürüm notlarında belirtilir.
İşlevleri korumanın, APK boyutunda bir miktar maliyete yol açsa da profili oluşturulan APK'nın, uygulama kullanıcılarının çalıştırdığı APK ile aynı olmasını sağladığını unutmayın.
Doğru zamanlama
Doğru profil oluşturma için (tüm performans testlerinde olduğu gibi) Profil oluşturulabilir uygulamalar bölümünde belirtildiği şekilde uygulamayı profileable
ve non-debuggable
yapmanız gerekir.
Terminalden iz yakalama
Terminalden bir kompozisyon izi yakalamak mümkündür. Bunu yapmak için Android Studio'nun normalde sizin için otomatik olarak yaptığı adımları uygulamanız gerekir.
Bağımlılık ekleme
Öncelikle, ek bağımlılıkları uygulamanıza ekleyin.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Kayıt komutu oluşturma
- Perfetto'da kullanılacak bir kayıt komutu oluşturun.
track_event
veri kaynağı bölümünü aşağıdaki örneğe göre manuel olarak ekleyin:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
İz yakalama
- Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
Bir yayın yaparak uygulamada izlemeyi etkinleştirin.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
Daha önce oluşturduğunuz kayıt komutunu başlatın.
İzlemeyi açın.
adb pull <location>
Cihazdan alınan izleme (kayıt komutunda belirtilen konum).Perfetto'da açın.
Jetpack Macrobenchmark ile izleme yakalama
Sonuç olarak izlemeler sağlayan Jetpack Macrobenchmark ile performansı ölçebilirsiniz. Macrobenchmark'larla kompozisyon izlemeyi etkinleştirmek için:
Macrobenchmark test modülüne şu ek bağımlılıkları ekleyin:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Karşılaştırmaları çalıştırmadan önce
androidx.benchmark.fullTracing.enable=true
enstrümantasyon bağımsız değişkenini ekleyin. Macrobenchmark enstrümantasyon bağımsız değişkenleri hakkında daha fazla bilgi için Macrobenchmark enstrümantasyon bağımsız değişkenleri başlıklı makaleyi inceleyin.
Geri bildirim
Bu özellik hakkındaki geri bildirimlerinizi, bulduğunuz hataları ve isteklerinizi bizimle paylaşmanızı rica ederiz. Sorun izleyiciyi kullanarak bize geri bildirim gönderebilirsiniz.