0Pricing
Android Academy · Ders

Başlangıç ve Temel Profiller

Soğuk başlangıçları hızlandırın.

Başlangıç ve Temel Profiller, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

İlk İzlenimler: Uygulama Başlangıcı

Başlangıç süresi, her kullanıcının deneyimlediği ilk şeydir. Google Play, yavaş başlangıcı bir kalite sorunu olarak bile gösterir. Hızlı bir soğuk başlangıç uygulamayı üst düzey hissettirir; yavaş olan ise kullanıcıların uygulamadan çıkmasına neden olur.

Bu derste üç başlangıç türünü, başlangıcı yavaşlatan etkenleri ve soğuk başlangıçları büyük ölçüde hızlandıran modern araçlar olan Uygulama Başlatma ile Temel Profilleri öğreneceksiniz.

Soğuk, Ilık ve Sıcak Başlangıç

Android, en yavaştan en hızlıya üç başlangıç senaryosu tanımlar:

  • Soğuk başlangıç: süreç mevcut değildir. Android süreci oluşturur, Application'ı ve ardından ilk ekranınızı çalıştırır. En yavaş ve optimize edilmesi en önemli başlangıç türüdür.
  • Ilık başlangıç: süreç canlıdır, ancak Etkinliğin yeniden oluşturulması gerekir.
  • Sıcak başlangıç: Etkinlik hâlâ bellektedir; yalnızca öne getirilir. Neredeyse anlıktır.

Optimizasyon çabaları soğuk başlangıca odaklanır; çünkü yeni ve geri dönen kullanıcılar en çok bununla karşılaşır.

Başlangıç Süresini Ölçme

Ölçmediğiniz bir şeyi iyileştiremezsiniz. Bunu yapmanın iki kolay yolu vardır:

  • Logcat: sistem, ilk kareye kadar geçen süreyi içeren bir Displayed satırı günlüğe yazar.
  • Makro karşılaştırma: StartupTimingMetric, kararlı ve tekrarlanabilir soğuk başlangıç ölçümleri sağlar.

Aşağıdaki adb komutunu çalıştırın ve Displayed satırını bekleyin.

# Cold-start the app and log time to first frame
adb shell am start -W -S com.example.app/.MainActivity

# Output includes:
#   TotalTime: 412   <- ms to first frame
# Or filter logcat:
adb logcat | grep "Displayed com.example.app"

Application.onCreate'ı Hafif Tutma

Application.onCreate() içindeki her şey, ilk karenizden önce ana iş parçacığında çalışır. Buradaki ağır başlatma işlemleri başlangıcı doğrudan geciktirir.

Aşağıdaki hatalı sürüm, birkaç kitaplığı hemen başlatır. İlk ekran için gerekmeyen her şeyi erteleyin veya arka planda çalıştırın.

// SLOW: blocks the first frame with eager init
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Analytics.init(this)        // network, disk
        ImageLoader.preload(this)   // heavy
        Database.warmUp(this)       // disk I/O
    }
}
// Each of these adds milliseconds before the user sees anything.

Jetpack Uygulama Başlatma Kitaplığı

Uygulama Başlatma kitaplığı, her biri zaman harcayan birden çok kitaplık içerik sağlayıcısını, tek bir ortak sağlayıcıyla değiştirir ve başlatma sırasını ve bağımlılıkları temiz bir şekilde ifade etmenizi sağlar.

Her bileşen için bir Initializer uygularsınız; Uygulama Başlatma bunları bir kez ve bağımlılık sırasına göre çalıştırır.

class AnalyticsInitializer : Initializer<Analytics> {
    override fun create(context: Context): Analytics {
        return Analytics.init(context.applicationContext)
    }
    // Runs after Logger is ready
    override fun dependencies() = listOf(LoggerInitializer::class.java)
}
// Registered via a single merged provider in the manifest,
// avoiding one ContentProvider per library.

Tembel ve Arka Plan Başlatması

Hemen yapılan işleri sıralamaktan daha iyi yaklaşım, başlangıçta bu işlerin daha azını yapmaktır. İki yöntem vardır:

  • Tembel: ağır nesneleri Kotlin'in by lazy yapısıyla ilk kullanımda oluşturun.
  • Arka plan: kullanıcı arayüzüyle ilgili olmayan başlatma işlemlerini ana iş parçacığından taşıyın.

Böylece ilk kare, kullanıcının henüz ihtiyaç duymadığı işler tarafından engellenmez.

class MyApp : Application() {
    // Built only when first accessed, not during onCreate
    val imageLoader by lazy { ImageLoader.build(this) }

    override fun onCreate() {
        super.onCreate()
        // Push non-critical setup off the main thread
        CoroutineScope(Dispatchers.Default).launch {
            Analytics.init(applicationContext)
        }
    }
}

AOT ve JIT: İlk Çalıştırma Neden Yavaştır

Android, varsayılan olarak uygulamanızın bayt kodunu yorumlama ve Tam Zamanında (JIT) derleme karışımıyla çalıştırır. Sık kullanılan kod ilk kez çalıştığında yorumlanır (yavaştır); çalışma zamanı onu yerel koda ancak daha sonra derler.

Soğuk başlangıcın ve ilk kaydırmanın daha yavaş hissedilmesinin nedeni tam olarak budur. Temel Profiller, önemli kodun kurulum sırasında Önceden (AOT) derlenmesini cihaza bildirerek bunu düzeltir.

Temel Profil Nedir

Bir Temel Profil, kritik akışlarınız (başlangıç, ilk kaydırma) sırasında çalıştırılan sınıfların ve yöntemlerin listesidir. Profil uygulamayla birlikte gönderilir; kurulum sırasında cihaz bu yöntemleri AOT ile derler. Böylece yöntemler ilk başlatmadan itibaren yerel hızda çalışır.

Google, hiçbir özellik kodu değişikliği gerektirmeden, yalnızca profil kullanılarak başlangıçta genellikle %20–40 aralığında iyileşme bildirir.

// build.gradle.kts
plugins { id("androidx.baselineprofile") }

dependencies {
    baselineProfile(project(":baselineprofile"))
}
// The generated profile ships as
//   assets/dexopt/baseline.prof
// and is applied automatically at install.

Temel Profil Oluşturma

Profili, bir cihazda kritik yolunuzu çalıştıran küçük bir sınama yazarak oluşturursunuz; araçlar hangi yöntemlerin çalıştığını kaydeder ve profil dosyasını yazar. Ardından dosyayı depoya kaydedip yeniden derlersiniz.

Aşağıda, başlangıcı ve bir kaydırma işlemini yakalayan tipik bir oluşturucu gösterilmektedir.

@RunWith(AndroidJUnit4::class)
class BaselineProfileGenerator {
    @get:Rule val rule = BaselineProfileRule()

    @Test
    fun generate() = rule.collect(packageName = "com.example.app") {
        pressHome()
        startActivityAndWait()
        // exercise the critical journey
        device.findObject(By.res("feed")).fling(Direction.DOWN)
    }
}
// Run the generateBaselineProfile Gradle task to produce the file.

Kazanımı Doğrulama

İyileşmeyi her zaman bir karşılaştırmayla doğrulayın; profil uygulanmış ve uygulanmamış başlangıçları karşılaştırın (CompilationMode.None ile profilli Partial).

Ölçüm yapmazsanız profilin yardımcı olduğunu kanıtlayamazsınız; ayrıca güncel olmayan bir profil işleri daha da kötüleştirebilir. Sıcak yollarınız önemli ölçüde değiştiğinde profili yeniden oluşturun.

@Test
fun startupWithProfile() = rule.measureRepeated(
    packageName = "com.example.app",
    metrics = listOf(StartupTimingMetric()),
    iterations = 10,
    startupMode = StartupMode.COLD,
    compilationMode = CompilationMode.Partial() // uses the baseline profile
) {
    pressHome()
    startActivityAndWait()
}

Bir Başlangıç Optimizasyonu Planı

Bunları tekrarlanabilir bir planda bir araya getirin:

  • Soğuk başlangıcı Macrobenchmark ve adb am start -W ile ölçün.
  • Application.onCreate'ı küçültün: by lazy ile erteleyin, işleri ana iş parçacığından taşıyın.
  • İçerik sağlayıcılarını birleştirmek ve başlatma sırasını düzenlemek için Uygulama Başlatma kullanın.
  • Kritik yolun AOT derlenmesi için bir Temel Profil gönderin.
  • Kazanımı bir karşılaştırmayla doğrulayın ve profili güncel tutun.

Sonuç: kullanıcıların fark edeceği hızlı bir ilk kare.

Kısa Kontrol

Uygulamanızla birlikte bir Temel Profil gönderiyorsunuz. Başlangıcı iyileştirmek için temel olarak ne yapar?

Özet: İlk Kareden İtibaren Hızlı

En görünür performans ölçütü olan başlangıcı nasıl optimize edeceğinizi öğrendiniz:

  • Soğuk başlangıcı optimize edin; Macrobenchmark ve adb am start -W ile ölçün.
  • Application.onCreate'ı hafif tutun: tembel başlatma ve kullanıcı arayüzüyle ilgili olmayan işleri arka planda çalıştırma kullanın.
  • Sağlayıcıları birleştirmek ve başlatıcıların sırasını düzenlemek için Uygulama Başlatma kitaplığını kullanın.
  • Sık kullanılan kodun ilk çalıştırmada yerel hızda çalışması için kurulum sırasında AOT derlenmesini sağlayan bir Temel Profil gönderin.
  • Kazanımı her zaman bir karşılaştırmayla doğrulayın ve profili güncel tutun.

Performans Optimizasyonu ve Profilleme tamamlandı: artık ölçüm yapabilir, yeniden oluşturmayı denetim altına alabilir, sızıntıları düzeltebilir ve hızlı başlatma sağlayabilirsiniz.

Sıkça Sorulan Sorular

“Başlangıç ve Temel Profiller” dersi ücretsiz mi?

Evet — “Başlangıç ve Temel Profiller” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“Başlangıç ve Temel Profiller” dersinde ne öğreneceğim?

Soğuk başlangıçları hızlandırın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Başlangıç ve Temel Profiller” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Performansı Ölçme
  2. Yeniden Oluşturmayı Denetleme
  3. Bellek Sızıntıları ve Çözümleri
  4. Başlangıç ve Temel Profiller
← Android Academy Sayfasına Dön