Uygulamanızı Kullanarak İzleme Günlükleri Oluşturma

Uygulamanızın nasıl çalıştığına dair yöntem izlemek için Debug sınıfını kullanarak uygulamanızı kullanabilirsiniz. Uygulamanızı bu şekilde kullanmak, cihazın tam olarak ne zaman başlayacağı ve izleme bilgilerini kaydetmeyi ne zaman durdurduğu üzerinde daha fazla kontrole sahip olmanızı sağlar. Cihaz, belirttiğiniz adları kullanarak iz günlüklerinizi de kaydeder. Böylece daha sonra her bir günlüğü kolayca tanımlayabilirsiniz. Daha sonra Android Studio CPU Profiler'ı kullanarak her bir iz günlüğünü görüntüleyebilirsiniz.

Ayrıca uygulamanızın kodunu kullanmadan CPU Profil Aracı'nda izlemeyi başlatıp durdurabilirsiniz.

İz günlükleri oluşturmaya başlamadan önce, uygulamanızın izleme günlüklerini uygulamaya özel dizinine kaydetmek için bir mantık eklediğinden emin olun.

Uygulamanızı kullanın

İzleme günlükleri oluşturmak için sistemin izleme verilerini günlüğe kaydetmeye başlamasını istediğiniz startMethodTracing() yöntemini çağırın.

Çağrıda, .trace dosyasının adını belirtebilirsiniz. Sistem bu dosyayı hedef cihazdaki kalıcı uygulama verileri için oluşturulmuş pakete özel bir dizine kaydeder. Bu dizin, getExternalFilesDir() tarafından döndürülen ve çoğu cihazda ~/sdcard/ dizininde bulunan dizindir. Bu dosya, ikili yöntem izleme verilerinin yanı sıra iş parçacığı ve yöntem adlarını içeren bir eşleme tablosunu içerir. İzlemeyi durdurmak için stopMethodTracing() numaralı telefonu arayın.

Aşağıdaki örnek, sample.trace adıyla bir iz günlüğünü kaydetmeyi başlatıp durduruyor:

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şlemini tekrar çağırırsa cihaza kaydedilen mevcut günlüğün üzerine yazar. Her iz günlüğünün adını dinamik olarak nasıl değiştireceğinizi öğrenmek için birden fazla günlük kaydetme hakkındaki bölüme gidin.

Sistem, siz stopMethodTracing() çağrısından önce maksimum arabellek boyutuna ulaşırsa izlemeyi durdurur ve konsola bir bildirim gönderir. İzlemeleri başlatan ve durduran yöntemler, uygulama işleminizin tamamında işe yarar. Yani etkinliğinizin onCreate(Bundle) yönteminde startMethodTracing() ve bu etkinliğin onDestroy() yönteminde stopMethodTracing() yöntemini ç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ürer"). İz günlüklerindeki zamanlama bilgileri yalnızca önceki iz günlükleriyle karşılaştırılırken kullanılabilir. Böylece son değişikliklerin uygulamanızı hızlandırıp yavaşlatıp yavaşlatmadığını görebilirsiniz.

Android 5.0 (API düzeyi 21) ve sonraki sürümleri çalıştıran cihazlara dağıtım yaparken, çalışma zamanı performansı üzerindeki etkisi daha az olan profil oluşturmak için örneğe dayalı profil oluşturma özelliğini kullanabilirsiniz. Örnek profil oluşturmayı etkinleştirmek için belirli bir örnekleme aralığıyla startMethodTracingSampling() yöntemini (startMethodTracing() çağırmak yerine) çağırın. Uygulamanız stopMethodTracing() çağırana kadar sistem düzenli olarak örnekler toplar.

Birden çok günlük kaydetme

Uygulamanız, iz günlüğü için yeni bir ad belirtmeden bir yöntem izlemeyi birden çok kez başlatıp durdurursa cihaz, yeni iz günlüğünü eskisinin üzerine yazar. Yani yalnızca en son iz günlüğünü saklar. Cihazınıza birden fazla iz günlüğünü kaydetmek için uygulamanız startMethodTracing() hizmetini her çağırdığında iz günlüğünü dinamik olarak yeniden adlandırın. Aşağıdaki örnekte, her bir iz günlüğüne ad verilirken geçerli tarih ve saati eklemek için SimpleDateFormat sınıfı kullanılmaktadır:

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 iz günlüğünü oluşturduktan sonra dosyaya aşağıdaki yöntemlerden birini kullanarak erişebilirsiniz:

  • Cihaz Gezgini'ni kullanın. Cihaz Gezgini'ni açmak için Görünüm > Araç Pencereleri > Cihaz Gezgini'ni tıklayın (veya araç pencere çubuğundaki Cihaz Gezgini düğmesini tıklayın). Şekil 1'de gösterildiği gibi, uygulamanızın pakete özgü dizinine 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, cihazdan sample.trace adlı bir iz günlüğünü yerel makinenizin ~/Documents/trace-logs/ dizinine kopyalar.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Daha sonra CPU Profil Aracı ile izleme dosyasını içe aktarabilirsiniz.