Uygulama başlatma analizi ve optimizasyonu

Uygulama başlatılırken kullanıcılar üzerinde ilk izlenimi uygulamanızı sağlar. Uygulama başlatma Hızlı yüklenmeli ve kullanıcının uygulamanızı kullanmak için ihtiyaç duyduğu bilgiler gösterilmelidir. Eğer uygulamanızın başlatılması çok uzun sürüyorsa kullanıcılar, çok uzun bekliyor.

Ölçmek için Macrobenchmark kitaplığını kullanmanızı öneririz. başlatma. Kitaplık, tam olarak doğru şekilde görmeniz için genel bir bakış ve ayrıntılı sistem izlemeleri sunar neler olduğunu anlamaya çalışın.

Sistem izleme verileri, cihazınızda neler olup bittiği hakkında faydalı bilgiler sağlar. Böylece, uygulamanızın başlatma sırasında ne yaptığını anlayabilir ve potansiyel optimizasyon alanlarını belirlemenize yardımcı olur.

Uygulama başlatma işleminizi analiz etmek için aşağıdakileri yapın:

Başlatma ve optimizasyonu analiz etme ve optimize etme adımları

Uygulamaların genellikle başlatma sırasında gerekli olan belirli kaynakları yüklemesi son kullanıcılara ulaşabilirsiniz. Gereksiz kaynakların yüklenmesi başlatana kadar bekleyebilir gerekir.

Performanstan ödün vermek için aşağıdakileri göz önünde bulundurun:

  • Her işlemin süresini ölçmek için Macrobenchmark kitaplığını kullanabilirsiniz. ve tamamlanması uzun süren blokları belirleyebilirsiniz.

  • Yoğun kaynak kullanan işlemlerin, uygulamanın başlatılması için kritik olduğunu onaylayın. Eğer uygulama tamamen çizilinceye kadar bekleyebilir, bu işlem uygulamadaki kaynak kısıtlamaları söz konusu olabilir.

  • Bu işlemin uygulama başlatılırken çalışmasını beklediğinizden emin olun. Çoğu zaman gereksiz işlemler, eski kod veya üçüncü taraf koddan çağrılabilir. kitaplıklar.

  • Mümkünse uzun süren işlemleri arka plana taşıyın. Arka plan işlemleri başlatma sırasında CPU kullanımını etkilemeye devam edebilir.

İşlemi tam olarak araştırdıktan sonra, uygun olup olmadığına karar verebilirsiniz. gereken süre ile uygulamaya dahil etmenin gerekliliği arasında başlatma. Regresyon veya bozucu değişiklikler potansiyelini de dahil etmeyi unutmayın. en iyi uygulamaları paylaşacağız.

için başlatma süresinden memnun olana kadar optimizasyon yapın ve uygulamasını indirin. Daha fazla bilgi için Aşağıdakileri tespit etmek ve teşhis etmek için metrikleri kullanma: sorunları.

Büyük operasyonlarda harcanan zamanı ölçmek ve analiz etmek

Uygulama başlatma izlerinizi eksiksiz olarak izledikten sonra izlemeye bakın ve süreyi ölçün bindApplication veya activityStart gibi büyük işlemler için alınır. Biz Perfetto veya Android Studio Profilers'ı kullanabilirsiniz.

Herhangi bir işlemi belirlemek için uygulama başlatılırken harcanan toplam süreye bakın şunları yapar:

  • Geniş zaman dilimlerini kaplar ve optimize edilebilir. Her milisaniye şu kadar süre içinde sayılır: bazı yolları da görmüştük. Örneğin, burada Choreographer çizim zamanları, düzen yükleme süreleri, kitaplık yüklenme süreleri, Binder işlemleri veya kaynak yükü kez. Genel bir başlangıç için şundan daha uzun süren tüm işlemlere bakın: 20ms.
  • Ana ileti dizisini engelleyin. Daha fazla bilgi için Bir Systrace'te gezinme raporu ekleyin.
  • Başlatma sırasında çalıştırmanız gerekmez.
  • İlk kareniz çizilene kadar bekleyebilir.

Performans boşluklarını bulmak için bu izlerin her birini daha ayrıntılı şekilde inceleyin.

Ana iş parçacığındaki pahalı işlemleri tanımlama

Dosya G/Ç ve ağ gibi pahalı işlemleri ana ileti dizisinden erişimi yok. Bu, uygulama başlatılırken aynı ölçüde önemlidir. Çünkü ana iş parçacığında yapılan pahalı işlemler uygulamayı yanıt vermeyebilir. ve diğer kritik işlemleri geciktirir. StrictMode.ThreadPolicy şunları yapabilir: pahalı işlemlerin ana iş parçacığında gerçekleştiği durumları saptamanıza yardımcı olabilir. Şuralarda StrictMode özelliğini etkinleştirmek iyi bir uygulamadır: gösterildiği gibi, sorunları mümkün olduğunca erken tanımlamak için şu örneği inceleyin:

Kotlin

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        ...
        if (BuildConfig.DEBUG)
            StrictMode.setThreadPolicy(
                StrictMode.ThreadPolicy.Builder()
                    .detectAll()
                    .penaltyDeath()
                    .build()
            )
        ...
    }
}

Java

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        ...
        if(BuildConfig.DEBUG) {
            StrictMode.setThreadPolicy(
                    new StrictMode.ThreadPolicy.Builder()
                            .detectAll()
                            .penaltyDeath()
                            .build()
            );
        }
        ...
    }
}

StrictMode.ThreadPolicy kullanılması, tüm hata ayıklama derlemelerinde iş parçacığı politikasını etkinleştirir ve ileti dizisi politikasının ihlali tespit edildiğinde uygulamayı kilitler. ileti dizisi politikası ihlallerinin gözden kaçmasını zorlaştırır.

TTID ve TTFD

Uygulamanın ilk karesini oluşturması için geçen süreyi görmek için süre ilk ekrana (TTID) göre ayarlayın. Ancak bu metrik, kullanıcının uygulamanızı ve oyununuzu uygulamanızla etkileşim kurmaya başlayın. Doluluk süresi görüntülü reklam (TTFD) metriği eksiksiz bir şekilde tamamlanması için gerekli kod yollarının ölçülmesi ve durumu gösterir.

Uygulamanın kullanıcı arayüzü tamamen çizildiğinde raporlama stratejileri için Başlatmayı iyileştirme başlıklı makaleye göz atın. zamanlama doğruluk oranı.

Her ikisi de kendi alanlarında önemli olduğundan hem TTID hem de TTFD için optimizasyon yapın. Kısa bir TTID, kullanıcının uygulamanın gerçekten başlatıldığını görmesine yardımcı olur. TTFD kısa, kullanıcının etkileşimde bulunmaya başlayabilmesi için önemlidir. yardımcı olabilir.

Genel ileti dizisi durumunu analiz etme

Uygulama başlatma süresini seçin ve genel iş parçacığı dilimlerine bakın. Ana iş parçacığı her zaman yanıt vermelidir.

Android Studio Profiler ve Perfetto ana ileti dizisine ve üzerinde ne kadar zaman harcandığına ilişkin dikkat edin. Perfetto izlerini görselleştirme hakkında daha fazla bilgi için Perfetto kullanıcı arayüzü belgelerinden faydalanabilirsiniz.

Ana iş parçacığı uyku durumunun büyük parçalarını tanımlama

Uykuya çok fazla zaman harcıyorsanız bunun nedeni büyük olasılıkla uygulamanızın ana işin tamamlanmasını bekleyen bir iş parçacığınız olsun. Çok iş parçacıklı bir uygulamanız varsa bekleyen ileti dizisini optimize edebilir ve anlamına gelir. Gereksiz bir kilit olmadığından da emin olmak için gecikmelere neden olan uyuşmazlıktır.

Ana iş parçacığının engellenmemesini ve kesintisiz uykuyu azaltın

Ana iş parçacığının engellenmiş duruma geçen her örneğini arayın. Perfetto Studio Profiler ise bunu iş parçacığı durumunda turuncu bir göstergeyle gösterir. önceliklendirebilirsiniz. İşlemleri belirleyin, bunların beklenip beklenmediğini ya da yapılıp yapılamayacağını araştırın kaçınılması ve gerektiğinde optimizasyon yapılması.

IO ile ilgili kesintiye uğratılabilir uyku kalitesi iyileştirme için çok iyi bir fırsat olabilir. KS yapan diğer işlemler, alakasız uygulamalar olsalar bile en üstteki uygulamanın yaptığı KS'dir.

Başlatma süresini iyileştirin

Optimizasyon fırsatını belirledikten sonra olası çözümleri keşfedin şu adımları izleyebilirsiniz:

  • İçerikleri hızlandırmak için geç ve eşzamansız olarak içerik yükleyin TTID.
  • Bağlayıcı çağrıları yapan çağrı işlevlerini en aza indirin. Kaçınılmazlarsa bu aramaları, telefon numarası yerine değerleri önbelleğe alarak aramaları tekrarlayan aramalar veya engellemeyen çalışmaları arka plandaki ileti dizilerine taşıma.
  • Uygulamanızın başlatılmasının daha hızlı görünmesini sağlamak için oluşturma işlemi geri kalana kadar, olabildiğince kısa sürede kullanıcıya Yükleme işlemi tamamlandı.
  • Bir başlangıç profili oluşturup ekleyin ekleyin.
  • Jetpack App Startup kitaplığını kullanarak uygulama başlatma sırasında bileşenlerin ilk kullanıma hazırlanmasını kolaylaştırır.

Kullanıcı arayüzü performansını analiz edin

Uygulama başlatma süresinde bir başlangıç ekranı ve ana sayfanızın yükleme süresi bulunur. Alıcı: uygulama başlatma süresini optimize edin, kullanıcı arayüzünüzün biraz farklıdır.

Başlatma aşamasındaki işi sınırla

Bazı karelerin yüklenmesi diğerlerinden daha uzun sürebilir. Bunlar, uygulama için pahalı çizimler.

Başlatma işlemini optimize etmek için aşağıdakileri yapın:

  • Yavaş düzenli geçişlere öncelik verin ve iyileştirmeler için bunları seçin.
  • Perfetto'dan gelen her uyarıyı inceleyin ve özel izleme etkinliklerinin ve gecikme yaşanabilir.

Çerçeve verilerini ölçme

Kare verilerini ölçmenin birden fazla yolu vardır. Toplama için beş ana yöntem şunlardır:

Ana etkinlik yükleme süresini kontrol edin

Uygulamanızın ana etkinliğinde bulabileceğiniz çok miktarda bilgi birden fazla kaynaktan yüklenmiştir. Evin Activity düzenini ve özellikle şuraya bakın: Choreographer.onDraw bu yöntemi kullanabilirsiniz.

  • reportFullyDrawn kullanın uygulamanızın artık optimizasyon için tamamen çizildiğini sisteme bildirmek için amaçlar.
  • StartupTimingMetric kullanarak etkinliği ve uygulama lansmanlarını ölçün en iyi uygulamaları görelim.
  • Kare düşüşlerine bakın.
  • Oluşturulması veya ölçülmesi uzun süren düzenleri belirleyin.
  • Yüklenmesi uzun süren öğeleri belirleyin.
  • Başlatma sırasında gereğinden fazla görünen gereksiz düzenleri belirleyin.

Temel etkinlik yükleme süresini optimize etmek için şu olası çözümleri göz önünde bulundurun:

  • Başlangıç düzeninizi mümkün olduğunca temel hale getirin. Daha fazla bilgi için bkz. Düzeni optimize et hiyerarşilerini ekleme.
  • Atlanan kareler ve atlanan kareler hakkında daha fazla bilgi sağlamak için özel izleme noktaları ekleyin. karmaşık düzenler.
  • Başlatma sırasında yüklenen bit eşlem kaynaklarının sayısını ve boyutunu en aza indirin.
  • Düzenlerin kullanılamadığı yerlerde ViewStub'ı kullanın VISIBLE. ViewStub, kullanıcının isteğine bağlı olarak çalışma zamanında düzen kaynaklarını gecikmeli olarak şişirmek için kullanılabilir. Daha fazla daha fazla bilgi için bkz. ViewStub.

    Jetpack Compose kullanıyorsanız bazı bileşenlerin yüklenmesini ertelemek için durum kullanarak ViewStub davranışına göre hareket edin:

    var shouldLoad by remember {mutableStateOf(false)}
    
    if (shouldLoad) {
     MyComposable()
    }
    

    Oluşturulabilir öğeleri koşullu blokta değiştirerek yükleme shouldLoad:

    LaunchedEffect(Unit) {
     shouldLoad = true
    }
    

    Bu işlem, koşullu tablodaki kodu içeren bir yeniden ilk snippet'te yer alır.

ziyaret edin. ziyaret edin.