Uygulamanızın yürütülmesinin yöntem izlerini oluşturmak için Debug
sınıfını kullanarak uygulamanızı enstrümante edebilirsiniz. Uygulamanızı bu şekilde enstrümante etmek, cihazın tam olarak ne zaman izleme bilgilerini kaydetmeye başlayıp ne zaman bırakacağı üzerinde daha fazla kontrol sahibi olmanızı sağlar. Cihaz,
her günlüğü kolayca tanımlayabilmeniz için, belirttiğiniz adları kullanarak iz günlüklerinizi
daha sonra. Ardından, Android Studio CPU Profilleyicisi'ni kullanarak her izleme günlüğünü görüntüleyebilirsiniz.
Ayrıca transkriptinizi CPU Profiler'da izlemeyi başlatma ve durdurma enstrümantasyonunu kullanabilirsiniz.
İz günlükleri oluşturmaya başlamadan önce uygulamanızın izleme günlüklerini uygulamaya özgü dizinine ekleyin.
Uygulamanızı kullanma
İzleme günlükleri oluşturmak için sistemin izleme verilerini kaydetmeye başlamasını istediğiniz yerde startMethodTracing()
işlevini çağırın.
Aramada .trace
dosyasının adını belirtebilirsiniz. Sistem, dosyayı hedef cihazdaki kalıcı uygulama verileri için tasarlanmış pakete özel bir dizine kaydeder. Bu dizin, getExternalFilesDir()
tarafından döndürülen ve çoğu cihazda ~/sdcard/
dizininde bulunan dizinle aynıdır.
Bu dosya, ikili yöntem iz verilerini ve iş parçacığı içeren bir eşleme tablosunu içerir
bahsedeceğim. İzlemeyi durdurmak için stopMethodTracing()
numaralı telefonu arayın.
Aşağıdaki örnek, şu ada sahip iz günlüğünü kaydetmeyi başlatır ve durdurur:
sample.trace
:
Kotlin
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample") // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing()
Java
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample"); ... // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing();
Uygulamanız, izleme günlüğünün adını değiştirmeden startMethodTracing()
işlevini tekrar çağırırsa cihaza kaydedilen mevcut günlüğün üzerine yazacağını unutmayın. Her bir izleme günlüğünün adını dinamik olarak nasıl değiştireceğinizi öğrenmek için birden fazla günlük kaydetme ile ilgili bölüme gidin.
Sistem, stopMethodTracing()
çağrısını yapmadan önce maksimum arabellek boyutuna ulaşırsa izlemeyi durdurur ve konsola bir bildirim gönderir.
İzleri başlatan ve durduran yöntemler uygulama sürecinizin tamamında işe yarar. Yani, etkinliğinizin onCreate(Bundle)
yönteminde startMethodTracing()
, etkinliğin onDestroy()
yönteminde ise stopMethodTracing()
çağırabilirsiniz.
Profil oluşturma etkinleştirildiğinde uygulamanızın daha yavaş çalıştığını unutmayın. Yani, mutlak zamanlamaları belirlemek için profil oluşturma verilerini kullanmamalısınız ("foo()
yönteminin çalışması 2,5 saniye sürüyor" gibi). İzleme günlüklerindeki zamanlama bilgileri yalnızca önceki izleme günlükleriyle karşılaştırıldığında faydalıdır. Böylece, son değişikliklerin uygulamanızı hızlandırıp hızlandırmadığını görebilirsiniz.
Android 5.0 (API düzeyi 21) ve sonraki sürümleri çalıştıran cihazlara dağıtım yaparken şunları yapabilirsiniz:
Çalışma zamanı performansı üzerindeki etkisi daha az olan profil oluşturmak için örnek tabanlı profil oluşturma yöntemini kullanın. Alıcı:
örnek profil oluşturmayı etkinleştirme, çağrı
startMethodTracingSampling()
.
(startMethodTracing()
çağrısı yerine) belirtilen bir örneklemeyle
seçebilirsiniz. Sistem, uygulamanız stopMethodTracing()
'ü çağırana kadar düzenli olarak örnek toplar.
Birden çok günlük kaydetme
Uygulamanız bir yöntem izlemeyi başlatma ve durdurma işlemi için bir yöntem izlemeyi birden fazla kez başlatırsa ve
yeni bir ad belirtirseniz cihaz, eski iz günlüğünün üzerine
yani yalnızca en son iz günlüğünü tutar. Cihazınıza birden fazla izleme günlüğü kaydetmek için uygulamanız startMethodTracing()
'ü her çağırdığında izleme günlüğünü dinamik olarak yeniden adlandırın.
Aşağıdaki örnekte SimpleDateFormat
kullanılmaktadır
sınıfını kullanın:
Kotlin
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()) val logDate: String = dateFormat.format(Date()) // Applies the date and time to the name of the trace log. Debug.startMethodTracing("sample-$logDate")
Java
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()); String logDate = dateFormat.format(new Date()); // Applies the date and time to the name of the trace log. Debug.startMethodTracing( "sample-" + logDate);
Cihazdaki izleme günlüklerine erişme
Sistem, cihazınızda izleme günlüğünü oluşturduktan sonra dosyaya aşağıdaki yöntemlerden biriyle erişebilirsiniz:
Cihaz Gezgini'ni kullanın. Cihaz Gezgini'ni açmak için Görünüm > Araç Pencereleri > Cihaz Gezgini'ni açın (veya Cihaz Gezgini
düğmesine basın). Şekil 1'de gösterildiği gibi, uygulamanızın pakete özel dizine giderek
.trace
dosyalarını bulabilirsiniz.Şekil 1. Cihaz Gezgini'ni kullanarak izleme günlüklerini bulma.
adb pull
komutunu kullanarak dosyayı yerel makinenize kopyalayın. Aşağıdaki komut,sample.trace
adlı bir izleme günlüğünü cihazdan yerel makinenizin~/Documents/trace-logs/
dizinine kopyalar.adb pull path-on-device/sample.trace ~/Documents/trace-logs/
Ardından CPU Profiler'ı kullanarak izleme dosyasını içe aktarın.