Başlangıç ekranı uygulamanızı Android 12 ve sonraki bir sürüme taşıma

Android 11 veya önceki sürümlerde özel bir başlangıç ekranı uyguluyorsanız uygulamanızı SplashScreen API'sine taşıyarak Android 12 ve sonraki sürümlerde doğru şekilde görüntülenmesini sağlayabilirsiniz.

Android 12'den itibaren sistem, tüm uygulamalar için baştan ve hazır durumda başlatma işlemlerinde Android sisteminin varsayılan başlangıç ekranını uygular. Varsayılan olarak bu sistem başlangıç ekranı, uygulamanızın başlatıcı simgesi öğesi ve temanızın windowBackground (tek renkliyse) kullanılarak oluşturulur.

Uygulamanızı taşımazsanız Android 12 ve sonraki sürümlerde uygulama başlatma deneyiminiz kötüleşebilir veya istenmeyen sonuçlar doğurabilir.

  • Mevcut başlangıç ekranınız android:windowBackground öğesini geçersiz kılan özel bir tema kullanılarak uygulanıyorsa sistem, Android 12 ve sonraki sürümlerde özel başlangıç ekranınızı varsayılan bir Android sistem başlangıç ekranıyla değiştirir. Bu, uygulamanızın amaçlanan deneyimi olmayabilir.

  • Mevcut başlangıç ekranınız özel bir Activity kullanılarak uygulanıyorsa uygulamanızı Android 12 veya sonraki sürümlerin yüklü olduğu cihazlarda başlattığınızda yinelenen başlangıç ekranları gösterilir: Sistem başlangıç ekranı gösterilir, ardından mevcut başlangıç ekranı etkinliğiniz gösterilir.

Bu belgede açıklanan taşıma sürecini tamamlayarak bu tür kötü veya istenmeyen deneyimleri önleyebilirsiniz. Taşıma işleminden sonra API, başlangıç süresini kısaltır, başlangıç ekranı deneyimi üzerinde tam kontrol sahibi olmanızı sağlar ve platformdaki diğer uygulamalarla daha tutarlı bir başlatma deneyimi oluşturur.

SplashScreen uyumluluk kitaplığı

SplashScreen API'yi doğrudan kullanabilirsiniz ancak bunun yerine Androidx SplashScreen uyumluluk kitaplığını kullanmanızı önemle tavsiye ederiz. Uyumluluk kitaplığı, SplashScreen API'sini kullanır, geriye dönük uyumluluğu etkinleştirir ve tüm Android sürümlerinde başlangıç ekranı için tutarlı bir görünüm ve tarz oluşturur. Bu doküman, compat kitaplığı kullanılarak yazılmıştır.

Doğrudan SplashScreen API'sini kullanarak taşıma işlemi yaparsanız Android 11 ve önceki sürümlerde başlangıç ekranınız, taşıma işleminden öncekiyle aynı görünür. Android 12'den itibaren başlangıç ekranı, Android 12 görünümüne ve tarzına sahiptir.

SplashScreen uyumluluk kitaplığını kullanarak taşıma işlemi yaparsanız sistem, tüm Android sürümlerinde aynı başlangıç ekranını gösterir.

Başlangıç ekranı uygulamanızı taşıma

Mevcut başlangıç ekranı uygulamanızı Android 12 ve sonraki sürümlere taşımak için aşağıdaki adımları uygulayın.

Bu prosedür, geçiş yaptığınız uygulama türü için geçerlidir. Özel bir Activity'dan geçiş yapıyorsanız özelleştirilmiş başlangıç ekranı Activity'nızı uyarlamak için bu belgede açıklanan en iyi uygulamaları izleyin. SplashScreen API'si, özel bir başlangıç ekranı etkinliğiyle ortaya çıkan başlatma gecikmesini de azaltır.

Başlangıç ekranınızı taşımak için aşağıdakileri yapın:

  1. build.gradle dosyasında, compileSdkVersion değerinizi değiştirin ve bağımlılıklara SplashScreen uyumluluk kitaplığını ekleyin.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Üst öğesi Theme.SplashScreen olan bir tema oluşturun. postSplashScreenTheme değerini Activity tarafından kullanılması gereken temaya, windowSplashScreenAnimatedIcon değerini ise çizilebilir veya animasyonlu çizilebilir bir öğeye ayarlayın. Diğer özellikler isteğe bağlıdır.

    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
       <!-- Set the splash screen background, animated icon, and animation
       duration. -->
       <item name="windowSplashScreenBackground">@color/...</item>
    
       <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated
            drawable. One of these is required. -->
       <item name="windowSplashScreenAnimatedIcon">@drawable/...</item>
       <!-- Required for animated icons. -->
       <item name="windowSplashScreenAnimationDuration">200</item>
    
       <!-- Set the theme of the Activity that directly follows your splash
       screen. This is required. -->
       <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

    Simgenizin altına arka plan rengi eklemek istiyorsanız Theme.SplashScreen.IconBackground temasını kullanabilir ve windowSplashScreenIconBackground özelliğini ayarlayabilirsiniz.

  3. Manifest dosyasında, başlangıç etkinliğinin temasını önceki adımda oluşturduğunuz temayla değiştirin.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. super.onCreate() yöntemini çağırmadan önce başlangıç etkinliğinde installSplashScreen yöntemini çağırın.

    class MainActivity : Activity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            // Handle the splash screen transition.
            val splashScreen = installSplashScreen()
    
            super.onCreate(savedInstanceState)
            setContentView(R.layout.main_activity)
            // ...

installSplashScreen, animasyonu özelleştirmek veya başlangıç ekranını daha uzun süre ekranda tutmak için isteğe bağlı olarak kullanabileceğiniz başlangıç ekranı nesnesini döndürür. Animasyonu özelleştirme hakkında daha fazla bilgi için Başlangıç ekranını daha uzun süre ekranda tutma ve Başlangıç ekranını kapatma animasyonunu özelleştirme başlıklı makaleleri inceleyin.

Özel başlangıç ekranı etkinliğinizi başlangıç ekranına uyarlama

Android 12 ve sonraki sürümler için başlangıç ekranına geçiş yaptıktan sonra önceki özel başlangıç ekranınızla Activity ne yapacağınıza karar verin. Aşağıdakilerden birini yapabilirsiniz:

  • Özel etkinliği saklayın ancak gösterilmesini engelleyin.
  • Marka bilinci oluşturma nedeniyle özel etkinliği koruyun.
  • Özel etkinliği kaldırın ve uygulamanızı gerektiği şekilde uyarlayın.

Özel etkinliğin gösterilmesini engelleme

Önceki başlangıç ekranınız Activity öncelikli olarak yönlendirme için kullanılıyorsa bu ekranı kaldırmanın yollarını düşünün. Örneğin, doğrudan asıl etkinliğe bağlantı verebilir veya alt bileşenleri olan tek bir etkinliğe geçebilirsiniz. Bu mümkün değilse yönlendirme etkinliğini yerinde tutmak ancak oluşturulmasını durdurmak için SplashScreen.setKeepOnScreenCondition kullanabilirsiniz. Bu işlem, başlangıç ekranını sonraki etkinliğe aktarır ve sorunsuz bir geçiş sağlar.

class RoutingActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)

        // Keep the splash screen visible for this Activity.
        splashScreen.setKeepOnScreenCondition { true }
        startSomeNextActivity()
        finish()
    }
    // ...

Marka bilinci oluşturma için özel etkinliği koruma

Markalama nedeniyle önceki bir başlangıç ekranını Activity kullanmak istiyorsanız başlangıç ekranını kapatma animasyonunu özelleştirerek sistem başlangıç ekranından özel başlangıç ekranınıza Activity geçiş yapabilirsiniz. Ancak mümkünse bu senaryodan kaçınmanız ve başlangıç ekranınızı markalamak için SplashScreen API'yi kullanmanız önerilir.

İletişim kutusu göstermeniz gerekiyorsa bunu sonraki özel başlangıç ekranı etkinliğinde veya sistem başlangıç ekranından sonra ana etkinlikte göstermenizi öneririz.

Özel başlangıç ekranı etkinliğini kaldırma

Genellikle, başlangıç ekranlarının kopyalanmasını önlemek, verimliliği artırmak ve başlangıç ekranı yükleme sürelerini azaltmak için önceki özel başlangıç ekranınızı Activity tamamen kaldırmanızı öneririz. Gereksiz başlangıç ekranı etkinliklerinin gösterilmesini önlemek için kullanabileceğiniz farklı teknikler vardır.

  • Bileşenleriniz, modülleriniz veya kitaplıklarınız için geç yükleme kullanın. Uygulamanın başlatma sırasında çalışması için gerekli olmayan bileşenleri veya kitaplıkları yüklemekten ya da başlatmaktan kaçının. Bu kaynakları daha sonra, uygulamanın ihtiyacı olduğunda yükleyin.

    Uygulamanızın düzgün çalışması için gerçekten bir bileşene ihtiyacı varsa bu bileşeni başlatma sırasında değil, yalnızca gerçekten ihtiyaç duyulduğunda yükleyin veya uygulama başladıktan sonra yüklemek için bir arka plan iş parçacığı kullanın. Application.onCreate() mümkün olduğunca hafif tutmaya çalışın.

    Uygulama başlatılırken bileşenleri başlatmak için App Startup kitaplığından da yararlanabilirsiniz. Bunu yaparken başlangıç etkinliği için gereken tüm modülleri yüklediğinizden ve geç yüklenen modüllerin kullanılabilir hale geldiği yerlerde takılmalara neden olmadığınızdan emin olun.

  • Yerel olarak az miktarda veri yüklerken yer tutucu oluşturma Önerilen tema yaklaşımını kullanın ve uygulama hazır olana kadar oluşturma işlemini bekletin. Geriye dönük uyumlu bir başlangıç ekranı uygulamak için Başlangıç ekranını daha uzun süre ekranda tutma bölümünde açıklanan adımları uygulayın.

  • Yer tutucuları göster. Süreleri belirsiz olan ağ tabanlı yüklemelerde başlangıç ekranını kapatın ve eşzamansız yükleme için yer tutucular gösterin. İçerik alanına, yükleme durumunu yansıtan hafif animasyonlar uygulamayı düşünün. Yüklenen içerik yapısının, içerik yüklendiğinde sorunsuz bir geçişi desteklemek için iskelet yapısıyla mümkün olduğunca eşleştiğinden emin olun.

  • Önbelleğe alma özelliğini kullanın. Kullanıcı uygulamanızı ilk kez açtığında, aşağıdaki resimde gösterildiği gibi bazı kullanıcı arayüzü öğeleri için yükleme göstergeleri gösterebilirsiniz. Kullanıcı uygulamanıza bir sonraki dönüşünde, daha yeni içerikleri yüklerken bu önbelleğe alınmış içeriği gösterebilirsiniz.

Şekil 1. Kullanıcı arayüzü yer tutucuları gösteriliyor.