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:
- Kaydetmek için bir ortam oluşturun izler.
- Sistem izlerini anlayın.
- Android Studio Profilers'ı kullanarak izleme raporunda gezinme veya Perfetto.
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:
dumpsys gfxinfo
kullanarak yerel toplama: uygulamanızın yavaş oluşturulmasından sorumlu olan dumpsys verileri son kullanıcılara nasıl bir etkide bulunduğunu öğreneceğiz. Ancak bu, genel performans metriklerinize performans eğilimini anlamak için farklı yayın döngüleri görürsünüz. Alıcı: Kullanıcı arayüzünü entegre etmek içingfxinfo
veframestats
kullanma hakkında daha fazla bilgi daha fazla bilgi edinmek için Yapay Zeka'nın temelleri Android uygulamalarını test etme.- JankStats kullanarak alan toplama: JankStats ile uygulamanızın belirli bölümlerindeki kare oluşturma sürelerini toplayın oluşturma ve verileri kaydedip analiz etme.
- Macrobenchmark (Perfetto altında) ile yapılan testlerde
- Perfetto Kare Zaman Çizelgesi: Android 12'de (API düzeyi 31) Kare zaman çizelgesini toplayabilirsiniz metrikler kare düşüşüne neden olan bir Perfetto izlerinden. Bu özellik, karelerin neden atlandığını teşhis etmenin ilk adımıdır.
- Joker için Android Studio Profiler Algılama
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ınVISIBLE
.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.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Macrobenchmark metriklerini yakalama
- Ölçüme genel bakış uygulama performans * Donmuş çerçeveler