Kullanıcılar uygulamaların hızlı yüklenmesini ve duyarlı olmasını bekler. Başlangıç zamanı yavaş olan bir uygulama bu beklentiyi karşılamıyor ve kullanıcıları hayal kırıklığına uğratabiliyor. Bu tür fakir bir kullanıcı uygulamanızı Play Store'da kötü puanlayabilir, hatta uygulamanızdan tamamen vazgeçmenize neden olabilir.
Bu sayfada, uygulamanızın lansman zamanını optimize etmenize yardımcı olacak bilgiler yer alır. ve lansman sürecinin dahili bileşenlerine genel bir bakış, ve başlangıç zamanıyla ilgili bazı yaygın sorunlar hakkında bilgi edineceksiniz. bunları ele alın.
Farklı uygulama başlatma durumlarını anlama
Uygulama şu üç durumdan birinde gerçekleşebilir: baştan başlatma, hazır durumda başlatma veya hazır durumda başlatma başlatabilirsiniz. Her eyalet, uygulamanızın görünür hale gelmesinin ne kadar süreceğini etkiler temsil eder. Soğuk başlatma sırasında, uygulamanız sıfırdan başlar. Diğer eyaletlerde, sistemin çalışan uygulamayı arka plandan ön plana getirmesi gerekir.
Her zaman baştan başlatma varsayımına göre optimizasyon yapmanızı öneririz. Bu şekilde, hazır ve çalışır durumda başlatma performansı da artabilir.
Uygulamanızı hızlı başlatma için optimize etmek amacıyla, gerçekleştiğine ve bunların her birinde nasıl etkileşime eyaletler.
Uygulama başlatmayı belirleyen iki önemli metrik, ilk ekran görüntülenene kadar geçen süredir (TTID) ve tamamen çizim süresi (TTFD). TTID, ilk kareyi görüntüler. TTFD ise uygulamanın görünmesi için gereken süreyi ifade eder. ve tamamen etkileşimlidir. Her ikisi de eşit derecede önemlidir çünkü TTID, kullanıcının uygulamanın yüklendiğini gösterir. TTFD, uygulamanın gerçekten kullanılabilir olduğu zamanı ifade eder. İkisinden biri kullanıcı uygulamanız çok uzunsa uygulamanızdan tam olarak yüklenmeden çıkış yapabilir.
Soğuk başlatma
Soğuk başlatma, bir uygulamanın sıfırdan başlamasını ifade eder. Bu durumda, uygulamanın sürecini, sistem tarafından oluşturulduğundan emin olun. Baştan başlamazlar Örneğin, cihaz başlatıldıktan sonra uygulamanızın ilk kez başlatılması veya sistem uygulamayı sonlandırdığından emin olun.
Bu tür bir başlangıç, başlatma süresini kısaltmanın en büyük zorluğunu getirir. Çünkü sistem ve uygulamanın yapması gereken işler diğer başlatma durumlarına kıyasla daha fazladır.
Soğuk başlatmanın başında, sistem aşağıdaki üç görevi yerine getirir:
- Uygulamayı yükleyip başlatın.
- Lansmandan hemen sonra uygulama için boş bir başlangıç penceresi görüntüleyin.
- Uygulama işlemini oluşturun.
Sistem, uygulama işlemini oluşturur oluşturmaz uygulama süreci sorumlu olur bir sonraki aşamaya geçeceksiniz:
- Uygulama nesnesini oluşturun.
- Ana ileti dizisini başlatın.
- Ana etkinliği oluşturun.
- Görüntüleme sayısını artırma.
- Ekranın düzenini sağlama.
- İlk çizimi yap.
Uygulama işlemi ilk çizimi tamamladığında sistem, uygulamadaki ana etkinlikle değiştirerek görüntülenen arka plan penceresini görebilirsiniz. Bu noktada uygulamayı kullanmaya başlayabilir.
Şekil 1'de, sistem ve uygulamanın aktarım işlerinin her bir diğer.
![](https://developer.android.com/static/topic/performance/images/cold-launch.png?hl=tr)
Uygulamanın oluşturulması ve oluşturulması sırasında performans sorunları ortaya çıkabilir. etkinliği'ne dokunun.
Uygulama oluşturma
Uygulamanız başlatıldığında, boş başlangıç penceresi Uygulama çizimini ilk kez tamamlar. Bu noktada, sistem işlemi, uygulamanızın başlangıç penceresini değiştirerek kullanıcının etkileşimde bulunmasını sağlar inceleyebilirsiniz.
Kendi uygulamanızda Application.onCreate()
özelliğini geçersiz kılarsanız sistem
uygulama nesnenizde onCreate()
yöntemini çağırır. Daha sonra uygulama ortaya çıkıyor.
UI iş parçacığı olarak da bilinen ana iş parçacığı ve üzerinde
ana aktivitedir.
Bu noktadan itibaren, sistem ve uygulama düzeyindeki işlemler uygulama yaşam döngüsü aşamalarına göz atın.
Etkinlik oluşturma
Uygulama işlemi etkinliğinizi oluşturduktan sonra etkinlik aşağıdaki işlemleri gerçekleştirir: işlemler:
- Değerleri başlatır.
- Oluşturucuları çağırır.
Activity.onCreate()
gibi uygun bir geri çağırma yöntemini çağırır. etkinliğin mevcut yaşam döngüsü durumuna
Genellikle onCreate()
yöntemi, yükleme süresi üzerinde en büyük etkiye sahiptir.
çünkü en yüksek ek yük ile işi yapar: yükleme ve şişirme
görünümlerini oluşturmak ve etkinliğin çalışması için gereken nesneleri başlatmak.
Hazır durumda başlatma
Hazır başlangıç, bir aşama sırasında gerçekleştirilen işlemlerin bir alt kümesini baştan başlatma. Aynı zamanda, çalışır durumda başlatmadan daha fazla genel gideri temsil eder. Hazır durumda başlatma olarak değerlendirilebilecek birçok olası durum vardır; takip etmek için:
Kullanıcı, uygulamanızdan çıkıp uygulamayı yeniden başlatırsa. Süreç, bir sonraki çalışmaya devam etmesi gerekir, ancak uygulama, yeni bir API kullanarak etkinliği
onCreate()
numaralı telefona sesli arama yapın.Sistem, uygulamanızı bellekten çıkarır ve ardından kullanıcı yeniden başlatır. İlgili içeriği oluşturmak için kullanılan sürecin yeniden başlatılması gerekir ancak görev biraz avantaj sağlayabilir
onCreate()
içine aktarılan kaydedilmiş örnek durumu paketinden alınır.
Çalışır durumda başlatma
Uygulamanızın çalışır durumda başlatma işleminde, baştan başlatmaya göre daha az genel işlem bulunur. Çalışır durumdayken, sistem, etkinliğinizi ön plana çıkarır. Uygulamanızın tüm etkinlikler bellekte kalmaya devam ederse uygulama, nesnenin tekrarlanmasını önleyebilir başlatma, düzeni şişirme ve oluşturma.
Bununla birlikte,
onTrimMemory()
içeriyorsa bu nesnelerin
açın.
Çalışır durumda başlatma, baştan başlatma senaryosuyla aynı ekranda çalışma biçimini gösterir. İlgili içeriği oluşturmak için kullanılan sistem işlemi, uygulamanın görünümü oluşturmayı bitirene kadar boş bir ekran etkinliği'ne dokunun.
![](https://developer.android.com/static/topic/performance/vitals/images/startup-modes-r1.png?hl=tr)
Perfetto'da uygulama startup'ını belirleme
Uygulama başlatma sorunlarını gidermek için tam olarak nelerin dahil edildiğini belirlemek faydalıdır. aşamasındayız. Uygulama başlatma aşamasının tamamını Perfetto, aşağıdaki adımları uygulayın:
Perfetto'da, Android Uygulama Startup'larından türetilmiş metriğin bulunduğu satırı bulun. Eğer adı görmüyorsanız cihaz üzerinde sistem izlemeyi kullanarak uygulamasında gösterilir.
Şekil 3.Android Uygulaması Başlatmaları, türetilmiş metrik dilimi Perfetto. İlgili dilimi tıklayın ve dilimi seçmek için m tuşuna basın. Dilimin etrafında parantezler görünür ve bunun ne kadar sürdüğünü belirtir. Süre: Geçerli seçim sekmesinde de gösterilir.
Sabitlenen Android Uygulama Girişimleri satırını, sağ taraftaki sabitle simgesini görünür hale getirebilirsiniz.
Söz konusu uygulamanın bulunduğu satıra gidin ve genişletmek için ilk hücreyi tıklayın satıra ekleyin.
w tuşuna basarak genellikle en üstte olan ana ileti dizisini yakınlaştırın (uzaklaştırmak için s, a, d tuşlarına basın, sola hareket ettirin ve sağa gidin, ).
Şekil 4.Android Uygulama Başlatmaları türetilmiş metrik dilimi uygulamanın ana ileti dizisine bağlanır. Türetilen metrikler dilimi, rapora tam olarak nelerin dahil edildiğini görmeyi kolaylaştırır hata ayıklamaya daha ayrıntılı şekilde devam edebilirsiniz.
Startup'ları incelemek ve iyileştirmek için metrikleri kullanma
Başlatma süresi performansını doğru şekilde teşhis etmek için, Google Etiket Yöneticisi'nden başlatmanın ne kadar sürdüğünü gösterir. Android, kullanıcıların uygulamanızı ve bunu teşhis etmenize yardımcı olur. Android vitals sizi uyarabilir ve teşhis araçları size yardımcı olabileceği için düşünmeye başlar.
Başlangıç metriklerini kullanmanın avantajları
Android, ilk ekran görüntülenene kadar geçen süreyi (TTID) ve tam ekran süresini kullanır (TTFD) metriklerini kullanır. Android Çalışma Zamanı (ART) Kodu optimizasyon için verimli bir şekilde önceden derlemek amacıyla bu metriklerdeki verileri kullanır. riskleri ele alacağız.
Startup'ların daha hızlı başlatılması, kullanıcıların uygulamanızla etkileşimini daha da sürdürülebilir hale getirir. Erken çıkış, örneği yeniden başlatma veya sayfadan çıkma örneklerini azaltır uygulamayı yükleyin.
Android vitals
Android vitals, sizi Uygulamanızın başlatma süreleri aşırı olduğunda Play Console.
Android vitals, uygulamanız için aşağıdaki başlatma sürelerini aşırı dikkate alır:
- Cold başlatma işlemi 5 saniye veya daha uzun sürer.
- Sıcak başlatma işlemi 2 saniye veya daha uzun sürer.
- Çabuk başlatma işlemi 1,5 saniye veya daha uzun sürer.
Android vitals, ilk ekran görüntülenene kadar geçen süre (TTID) metriğini kullanır. Örneğin, Google Play'in Android vitals verilerini nasıl topladığı hakkında bilgi için bkz. Play Console dokümanları.
İlk ekran görüntülenene kadar geçen süre
İlk ekran görüntülenene kadar geçen süre (TTID), ilk karenin gösterilmesi için gereken süredir.
olabilir. Bu metrik, bir uygulamanın
baştan başlatma sırasında işlemin başlatılması, etkinlik sırasındaki işlemin
soğuk veya sıcak başlatma sırasında
oluşturma ve ilk kareyi görüntüleme. Saklanıyor
Uygulamanızın TTID'nin düşük olması, kullanıcıların
hızlı bir şekilde başlatılmasını sağlar. TTID, Android tarafından her uygulama için otomatik olarak raporlanır
Çerçeve. Uygulama başlatma için optimizasyon yaparken,
TTFD'ye kadar bilgi almak için reportFullyDrawn
.
TTID, ölçümün yapıldığı toplam süreyi temsil eden aşağıdaki etkinlik dizisini içerir:
- Süreci başlatma.
- Nesneler başlatılıyor.
- Etkinliği oluşturma ve başlatma.
- Düzeni şişirme.
- Uygulamayı ilk kez çizmek.
TTID kimliğini al
TTID'yi bulmak için Logcat komut satırı aracında bir çıkış satırı arayın
Displayed
adlı bir değer içerir. Bu değer TTID'dir ve benzer görünür
aşağıdaki örneğe dönelim: 3s534 ms.
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms
Android Studio'da TTID'yi bulmak için Logcat görünümünüzdeki filtreleri devre dışı bırakın:
seçin ve ardından Şekil 5'te gösterildiği gibi Displayed
zamanını bulun.
Uygulama değil sistem sunucusu nedeniyle filtrelerin devre dışı bırakılması gerekir
bu günlüğü sunar.
![](https://developer.android.com/static/topic/performance/images/displayed-logcat.png?hl=tr)
Displayed
değerine sahip olduğundan emin olun.Logcat çıkışındaki Displayed
metriği,
tüm kaynakların yüklenip görüntülenmemesi için gereken süredir. Uygulama,
kaynak olmayan veya uygulamanın
bölümüdür. Bu kaynaklar yüklendiğinden hariç tutulur
satır içi bir işlemdir ve uygulamanın ilk görüntüsünü engellemez.
Bazen Logcat çıkışındaki Displayed
satırı ek bir alan içerir
toplam süreyi ifade eder. Örnek:
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms (total +1m22s643ms)
Bu durumda, ilk ölçüm yalnızca ilk yapılan etkinlik içindir.
çizer. total
süresi ölçümü, uygulama işlemi başlangıcında başlar ve
önce başlatılan ancak diğer kullanıcılara hiçbir şey göstermeyen
ekranda görebilirsiniz. total
zaman ölçümü yalnızca bir
ve toplam başlatma süreleri arasındaki farkı
fark edebilirsiniz.
Android Studio'da Logcat'i kullanmanızı öneririz ancak Android kullanmıyorsanız
Studio, uygulamanızı adb
kabuğuyla çalıştırarak TTID'yi de ölçebilirsiniz.
etkinlik yöneticisi komutunu kullanın. Aşağıda bununla ilgili bir örnek verilmiştir:
adb [-d|-e|-s <serialNumber>] shell am start -S -W
com.example.app/.MainActivity
-c android.intent.category.LAUNCHER
-a android.intent.action.MAIN
Displayed
metriği, Logcat çıkışında önceki gibi görünür. Terminaliniz
penceresinde şunlar görüntülenir:
Starting: Intent
Activity: com.example.app/.MainActivity
ThisTime: 2044
TotalTime: 2044
WaitTime: 2054
Complete
-c
ve -a
bağımsız değişkenleri isteğe bağlıdır ve <category>
belirtmenizi sağlar
ve <action>
.
Tam gösterime kalan süre
Tam ekran süresi (TTFD), bir uygulamanın kullanıcı için etkileşimlidir. Reklamın görüntülenmesi için geçen süre olarak uygulamanın kullanıcı arayüzünün ilk çerçevesi ve eşzamansız olarak yüklenen içerik sonraki kareyi seçin. Genellikle bu, yüklenen birincil içeriktir (uygulama tarafından bildirildiği şekilde ağ veya diskten) Başka bir deyişle TTFD, TTID ve uygulamanın kullanılabilir hale gelmesi için gereken süre. Uygulamanızın TTFD düşük, kullanıcıların pek çok yolu vardır.
Choreographer
, etkinliğin
onDraw()
yöntemini kullanarak ve bu çağrıyı ilk kez çağırdığını tespit ettiğinde.
Ancak her uygulama TTFD'yi ne zaman belirleyeceğini bilemez.
biraz farklı davranır. Uygulamanın TTFD'yi belirlemek için sisteme sinyal vermesi gerekir
tamamen çizilmiş durumuna ulaştığında.
TTFD'yi al
TTFD'yi bulmak için
ComponentActivity
için reportFullyDrawn()
yöntemi. İlgili içeriği oluşturmak için kullanılan
reportFullyDrawn
yöntemi, uygulama tamamen çizildiğinde ve kullanılabilir durumda olduğunda bunu bildirir
durumu. TTFD, sistemin uygulamanın başlatılmasından itibaren geçen süredir
reportFullyDrawn()
çağrıldığında ne yapılmalı? Aramazsanız
reportFullyDrawn()
, TTFD değeri bildirilmez.
TTFD'yi ölçmek için, kullanıcı arayüzünü tamamen çizdikten sonra reportFullyDrawn()
işlevini çağırın ve
sahip olmayabilir. İlk etkinlik bitmeden reportFullyDrawn()
adlı kişiyi aramayın
pencere ilk olarak çizilir ve sistem tarafından ölçüldüğü şekilde görüntülenir. Bunun nedeni,
sistem, ölçülen süreyi raporlar. Başka bir deyişle,
Sistem TTID'yi algılamadan reportFullyDrawn()
önce, sistem her ikisini de bildirir
TTID ve TTFD, aynı değer olarak kullanılır ve bu değer, TTID değeridir.
reportFullyDrawn()
işlevini kullandığınızda Logcat aşağıdakine benzer bir çıkış görüntüler
(TTFD'nin 1s54 ms olduğu bir örnek):
system_process I/ActivityManager: Fully drawn {package}/.MainActivity: +1s54ms
Logcat çıkışı bazen bir total
zamanı içerir (
ilk ekran.
Görüntüleme süreleriniz istediğinizden yavaşsa, kötü amaçlı yazılımın neden olur.
Temel durumlarda tamamen çizilmiş durumu belirtmek için reportFullyDrawn()
kullanabilirsiniz
tamamen çizilmiş duruma ulaşıldığını
bildiğiniz bir sürüm oluşturun. Ancak,
arka plan iş parçacıklarının tamamen çizilmeden önce arka plan çalışmasını
durumu gerçekleştirilir, daha doğru bir sonuç için reportFullyDrawn()
işlemini ertelemeniz gerekir
TTFD ölçümü. reportFullyDrawn()
ertelemenin nasıl yapılacağını öğrenmek için aşağıdaki bağlantılara göz atın
bölümüne bakın.
Başlatma zamanlaması doğruluğunu iyileştirin
Uygulamanız geç yükleme yapıyorsa ve ilk ekranda
Diğer tüm kaynaklardan (ör. uygulamanız ağdan resim getirirken)
reportFullyDrawn
aramasını, uygulamanız kullanıma sunulana kadar ertelemek isteyebilir
liste popülasyonunu karşılaştırmanıza dahil edebilmeniz için kullanılabilirdir
zamanlama.
Örneğin, kullanıcı arayüzünde RecyclerView
gibi bir dinamik liste varsa
ya da tembel liste yerine
Liste ilk olarak çizilir ve böylece kullanıcı arayüzü tamamen çizilmiş olarak işaretlendikten sonra.
Bu gibi durumlarda, listedeki nüfus karşılaştırmaya dahil edilmez.
Listedeki nüfusu karşılaştırma zamanlamanıza dahil etmek için
getFullyDrawnReporter()
kullanarak FullyDrawnReporter
ve bir
bunu uygulama kodunuzda belirtin. Arka plan görevinin ardından bildireni serbest bırakın
listeyi doldurur.
FullyDrawnReporter
, hepsine kadar reportFullyDrawn()
yöntemini çağırmaz
eklenen muhabirler serbest bırakılır. Arka plan işlemine kadar bir bildiren ekleyerek
zamanlamalar, formun doldurulması için gereken süreyi de
listesi oluşturun. Bu, uygulamanın
ancak zamanlama başlangıç verilerinin doldurulması için gereken süreyi içermesine izin verir
liste dışı bırakmalısınız. Tüm görevler tamamlanana kadar reportFullyDrawn()
çağrılmaz
tamamlanan sonuçlar bulunur.
Aşağıdaki örnekte, birden fazla arka plan görevini nasıl çalıştırabileceğiniz gösterilmektedir (her biri kendi muhabirini kaydettirmek üzere)
Kotlin
class MainActivity : ComponentActivity() { sealed interface ActivityState { data object LOADING : ActivityState data object LOADED : ActivityState } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var activityState by remember { mutableStateOf(ActivityState.LOADING as ActivityState) } fullyDrawnReporter.addOnReportDrawnListener { activityState = ActivityState.LOADED } ReportFullyDrawnTheme { when(activityState) { is ActivityState.LOADING -> { // Display the loading UI. } is ActivityState.LOADED -> { // Display the full UI. } } } SideEffect { lifecycleScope.launch(Dispatchers.IO) { fullyDrawnReporter.addReporter() // Perform the background operation. fullyDrawnReporter.removeReporter() } lifecycleScope.launch(Dispatchers.IO) { fullyDrawnReporter.addReporter() // Perform the background operation. fullyDrawnReporter.removeReporter() } } } } }
Java
public class MainActivity extends ComponentActivity { private FullyDrawnReporter fullyDrawnReporter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); fullyDrawnReporter = getFullyDrawnReporter(); fullyDrawnReporter.addOnReportDrawnListener(() -> { // Trigger the UI update. return Unit.INSTANCE; }); new Thread(new Runnable() { @Override public void run() { fullyDrawnReporter.addReporter(); // Do the background work. fullyDrawnReporter.removeReporter(); } }).start(); new Thread(new Runnable() { @Override public void run() { fullyDrawnReporter.addReporter(); // Do the background work. fullyDrawnReporter.removeReporter(); } }).start(); } }
Uygulamanız Jetpack Compose'u kullanıyorsa belirtmek için aşağıdaki API'leri kullanabilirsiniz tamamen çizilmiş durum:
ReportDrawn
: composable'ınızın hemen kullanıma hazır olduğunu gösterir bahsedeceğim.ReportDrawnWhen
: Bir koşulu (ör.list.count > 0
) alır. composable'ınızın etkileşime hazır olduğunu belirtin.ReportDrawnAfter
: Bir askıya alma yöntemi alır. Bu yöntem, tamamlandıktan sonra composable'ınızın etkileşime hazır olduğunu gösterir.
Performans sorunlarını belirleme
Performans sorunlarını tespit etmek için Android Studio CPU Profiler'ı kullanabilirsiniz. Daha fazla CPU Profiler ile CPU etkinliğini inceleme başlıklı makaleyi inceleyin.
Satır içi izleme sayesinde olası performans sorunları hakkında da bilgi edinebilirsiniz.
uygulamanızın içinde ve etkinliklerin onCreate()
yöntem. Satır içi reklamlar hakkında bilgi edinmek için
Trace
işlevlerine ilişkin dokümanlara ve genel bakış"a
göz önünde bulundurmanız gerekir.
Sık karşılaşılan sorunları çözme
Bu bölümde, uygulama başlatma performansını sıklıkla etkileyen çeşitli sorunlar ele alınmaktadır. Bu sorunlar temel olarak uygulama ve etkinlik nesnelerinin başlatılmasıyla ilgilidir. en iyi uygulamaları paylaşacağız.
Yoğun uygulama başlatma
Kodunuz Application
nesnesini geçersiz kıldığında başlatma performansı düşebilir
ve bu nesne ilk kullanıma hazırlanırken yoğun çalışma veya karmaşık mantık yürütür. Uygulamanız
Application
alt sınıflarınız iyi performans gösterirse başlatma sırasında zaman kaybedebilirsiniz
ilk kullanıma hazırlar.
Bazı başlatma işlemleri tamamen gereksiz olabilir (ör. başlatma sırasında) başlatıldığında ana aktiviteye ait durum bilgilerini yanıt vermektir. Amaç ile, uygulama yalnızca bir alt kümeyi kullanır durumunu tekrar ele alacağız.
Uygulamayı başlatma sırasında karşılaşılan diğer zorluklar arasında atık toplama etkinlikleri bulunur ya da aynı anda gerçekleşen disk G/Ç'si de olabilir. Bu da başlatma işlemini daha da engeller. Çöp koleksiyonu, özellikle Dalvik çalışma zamanı açısından Android Çalışma zamanı (ART), atık toplama işlemini eşzamanlı olarak gerçekleştirerek etkisini görebilirsiniz.
Sorunu teşhis etme
Sorunu teşhis etmeye çalışmak için yöntem izleme veya satır içi izleme özelliğini kullanabilirsiniz.
Yöntem izleme
CPU Profiler'ı çalıştırdığınızda callApplicationOnCreate()
yöntemi sonunda com.example.customApplication.onCreate
yönteminizi çağırır. Eğer
araç, bu yöntemlerin yürütülmesinin uzun sürdüğünü gösteriyor.
ve orada ne tür çalışmaların yapıldığını
görmek üzere araştırma yapabilirsiniz.
Satır içi izleme
Aşağıdakiler de dahil olmak üzere olası nedenleri araştırmak için satır içi izlemeyi kullanın:
- Uygulamanızın ilk
onCreate()
işlevi. - Uygulamanızın başlattığı tüm global tekil nesneler.
- yardım edebilirler.
Sorunun çözümleri
Sorun ister gereksiz başlatmalardan ister disk G/Ç'sinden kaynaklanıyor olsun, geç başlatmadır. Başka bir deyişle, yalnızca hemen gereklidir. Genel statik nesneler oluşturmak yerine uygulamanın nesneleri yalnızca ihtiyaç duyduğunda başlattığı tekli kalıp gerekir.
Ayrıca, kullanmayı düşünebileceğiniz Hilt gibi bir bağımlılık yerleştirme çerçevesi ilk kez eklendiğinde nesneler ve bağımlılıklar oluşturur.
Uygulamanız başlangıçta uygulama bileşenlerini ilk kullanıma hazırlamak için içerik sağlayıcılar kullanıyorsa bunun yerine Uygulama Başlatma kitaplığını kullanabilirsiniz.
Yoğun etkinlik başlatma
Etkinlik oluşturma, genellikle çok fazla ek yük gerektirir. Çoğu zaman performansı artırmak için bu çalışmayı optimize etme fırsatları sunar. Böyle yaygın sorunlar şunlardır:
- Büyük veya karmaşık düzenleri şişirme.
- Disk veya ağ G/Ç üzerinde ekran çizimi engelleniyor.
- Bit eşlemleri yükleme ve kodunu çözme.
VectorDrawable
nesneleri pikselleştiriliyor.- Etkinliğin diğer alt sistemlerinin başlatılması.
Sorunu teşhis etme
Bu durumda da hem yöntem izleme hem de satır içi izleme yararlı olabilir.
Yöntem izleme
CPU Profiler'ı kullanırken uygulamanızın Application
alt sınıf kurucuları ve com.example.customApplication.onCreate()
yöntemleridir.
Araç bu yöntemlerin yürütülmesinin uzun sürdüğünü gösterirse ve orada ne tür çalışmaların yapıldığını görmek üzere araştırma yapabilirsiniz.
Satır içi izleme
Aşağıdakiler de dahil olmak üzere olası nedenleri araştırmak için satır içi izlemeyi kullanın:
- Uygulamanızın ilk
onCreate()
işlevi. - Başlattığı tüm global tekil nesneler.
- yardım edebilirler.
Sorunun çözümleri
Pek çok olası darboğaz vardır, ancak sık karşılaşılan iki sorun ve çözümü şu şekilde:
- Görünüm hiyerarşiniz ne kadar büyükse uygulamanın bunu şişirmesi o kadar fazla zaman alır. İki
bu sorunu gidermek için uygulayabileceğiniz adımlar şunlardır:
- Gereksiz veya iç içe yerleştirilmiş düzenleri azaltarak görünüm hiyerarşinizi düzeltin.
- Lansman sırasında görünür olması gerekmeyen kullanıcı arayüzü bölümlerini büyütmeyin.
Bunun yerine, alt hiyerarşiler için yer tutucu olarak bir
ViewStub
nesnesi kullanın uygulama için daha uygun bir zamana erişebilmesidir.
- Tüm kaynak başlatma işlemlerinizin ana iş parçacığında bulunması da yavaşlayabilir
. Bu sorunu aşağıdaki şekilde ele alabilirsiniz:
- Uygulamanın bir cihazda gecikmeli olarak gerçekleştirebilmesi için tüm kaynak başlatma işlemini taşıyın kullanabilirsiniz.
- Uygulamanın yüklenip görünümlerinizi göstermesine izin verin ve daha sonra görseli güncelleyin özellikleri olabilir.
Özel başlangıç ekranları
Aşağıdakilerden birini daha önce kullandıysanız başlatma sırasında fazladan süre görebilirsiniz: Android 11'de (API) özel bir başlangıç ekranı uygulamak için aşağıdaki yöntemleri 30. seviye) veya daha eski sürümler:
- Baştaki sayfayı kapatmak için
windowDisablePreview
tema özelliğini kullanmak sırasında sistem tarafından çizilen boş ekran. - Özel bir
Activity
kullanılıyor.
Android 12'den itibaren SplashScreen
API'ye geçiş yapılması zorunludur.
Bu API, daha hızlı bir başlatma süresi sağlar ve başlangıç ekranınızı
şu yöntemleri kullanabilirsiniz:
- Başlangıç ekranının görünümünü değiştirmek için bir tema ayarlayın.
- Başlangıç ekranının ne kadar süre boyunca
windowSplashScreenAnimationDuration
. - Başlangıç ekranı animasyonunu özelleştirin ve başlangıç ekranını kapatmak için animasyon.
Ayrıca, karşılaştırma kitaplığı SplashScreen
API'yi geriye dönük olarak destekler.
ve ilk etapta tutarlı bir görünüm ve tarz yaratmak için geriye dönük uyumluluk
tüm Android sürümlerinde ekran görüntüsü alınır.
Ayrıntılar için Başlangıç ekranı taşıma rehberine bakın.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Yavaş oluşturma
- Macrobenchmark metriklerini yakalama
- Temel Profiller Oluşturma{:#create-profile-rules}