Memigrasikan implementasi layar pembuka Anda ke Android 12 dan yang lebih baru

Jika Anda menerapkan layar pembuka kustom di Android 11 atau yang lebih lama, migrasikan aplikasi Anda ke SplashScreen API untuk membantu memastikan aplikasi ditampilkan dengan benar di Android 12 dan yang lebih baru.

Mulai Android 12, sistem akan menerapkan layar pembuka default sistem Android di cold dan warm start untuk semua aplikasi. Secara default, layar pembuka sistem ini dibuat menggunakan elemen ikon peluncur aplikasi Anda dan windowBackground tema Anda, jika berupa satu warna.

Jika Anda tidak memigrasikan aplikasi, pengalaman peluncuran aplikasi di Android 12 dan yang lebih baru mungkin menurun atau memiliki hasil yang tidak diinginkan.

  • Jika layar pembuka yang ada diterapkan menggunakan tema kustom yang menggantikan android:windowBackground, sistem akan mengganti layar pembuka kustom Anda dengan layar pembuka sistem Android default di Android 12 dan yang lebih baru. Ini mungkin bukan pengalaman yang diinginkan aplikasi Anda.

  • Jika layar pembuka yang ada diterapkan menggunakan Activity khusus, meluncurkan aplikasi di perangkat yang menjalankan Android 12 atau yang lebih baru akan menghasilkan layar pembuka duplikat: layar pembuka sistem ditampilkan, diikuti dengan aktivitas layar pembuka yang ada.

Anda dapat mencegah pengalaman yang tidak baik atau tidak diinginkan ini dengan menyelesaikan proses migrasi yang dijelaskan dalam dokumen ini. Setelah Anda bermigrasi, API akan meningkatkan waktu startup, memberi Anda kontrol penuh atas pengalaman layar pembuka, dan menciptakan pengalaman peluncuran yang lebih konsisten dengan aplikasi lain di platform tersebut.

Library compat SplashScreen

Anda dapat menggunakan API SplashScreen secara langsung, tetapi sebaiknya gunakan Androidx SplashScreenlibrary compat. Library compat menggunakan API SplashScreen, memungkinkan kompatibilitas mundur, serta membuat tampilan dan nuansa yang konsisten untuk tampilan layar pembuka di semua versi Android. Dokumen ini ditulis menggunakan library compat.

Jika Anda bermigrasi menggunakan SplashScreen API secara langsung, di Android 11 dan yang lebih lama, layar pembuka Anda akan terlihat sama persis seperti sebelum migrasi. Mulai Android 12, layar pembuka memiliki tampilan dan nuansa Android 12.

Jika Anda bermigrasi menggunakan library compat SplashScreen, sistem akan menampilkan layar pembuka yang sama di semua versi Android.

Memigrasikan implementasi layar pembuka Anda

Selesaikan langkah-langkah berikut untuk memigrasikan penerapan layar pembuka yang ada ke Android 12 dan yang lebih baru.

Prosedur ini berlaku untuk jenis implementasi apa pun tempat Anda bermigrasi. Jika Anda bermigrasi dari Activity khusus, ikuti praktik terbaik yang dijelaskan dalam dokumen ini untuk menyesuaikan layar pembuka yang disesuaikan Activity. SplashScreen API juga mengurangi latensi startup yang diperkenalkan dengan aktivitas layar pembuka khusus.

Untuk memigrasikan layar pembuka, lakukan hal berikut:

  1. Dalam file build.gradle, ubah compileSdkVersion dan sertakan library compat SplashScreen dalam dependensi.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Buat tema dengan induk Theme.SplashScreen. Tetapkan nilai postSplashScreenTheme ke tema yang harus digunakan Activity dan nilai windowSplashScreenAnimatedIcon ke drawable atau drawable animasi. Atribut lainnya bersifat opsional.

    <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>
    

    Jika ingin menambahkan warna latar belakang di bawah ikon, Anda dapat menggunakan tema Theme.SplashScreen.IconBackground dan menyetel atribut windowSplashScreenIconBackground.

  3. Dalam manifes, ganti tema aktivitas awal dengan tema yang Anda buat di langkah sebelumnya.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Panggil installSplashScreen di aktivitas awal sebelum memanggil super.onCreate().

    Kotlin

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

    Java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
             // Handle the splash screen transition.
             SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
    
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main_activity);
        }
    }
    

installSplashScreen menampilkan objek layar pembuka, yang dapat Anda gunakan secara opsional untuk menyesuaikan animasi atau mempertahankan layar pembuka di layar dalam durasi yang lebih lama. Untuk detail selengkapnya tentang menyesuaikan animasi, lihat Mempertahankan layar pembuka di layar untuk waktu yang lebih lama dan Menyesuaikan animasi untuk menutup layar pembuka.

Menyesuaikan Aktivitas layar pembuka kustom Anda dengan layar pembuka

Setelah bermigrasi ke layar pembuka untuk Android 12 dan yang lebih baru, tentukan tindakan yang harus dilakukan dengan layar pembuka kustom sebelumnya Activity. Anda memiliki opsi berikut:

  • Mempertahankan aktivitas kustom, tetapi mencegahnya ditampilkan.
  • Pertahankan aktivitas kustom karena alasan branding.
  • Hapus aktivitas kustom dan sesuaikan aplikasi Anda sesuai kebutuhan.

Mencegah Aktivitas kustom ditampilkan

Jika Activity layar pembuka Anda sebelumnya terutama digunakan untuk pemilihan rute, pertimbangkan cara untuk menghapusnya. Misalnya, Anda mungkin langsung menautkan ke aktivitas sebenarnya atau berpindah ke satu aktivitas dengan subkomponen. Jika tidak memungkinkan, Anda dapat menggunakan SplashScreen.setKeepOnScreenCondition untuk mempertahankan aktivitas pemilihan rute, tetapi menghentikannya agar tidak dirender. Dengan melakukannya, layar pembuka akan ditransfer ke aktivitas berikutnya dan mendukung transisi yang lancar.

Kotlin

  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()
     }
   ...
  

Java

  public class RoutingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      SplashScreen splashScreen = SplashScreen.installSplashScreen(this);

       super.onCreate(savedInstanceState);

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

Mempertahankan aktivitas kustom untuk branding

Jika ingin menggunakan Activity layar pembuka sebelumnya karena alasan branding, Anda dapat bertransisi dari layar pembuka sistem ke layar pembuka kustom Activity dengan menyesuaikan animasi untuk menutup layar pembuka. Namun, sebaiknya hindari skenario ini jika memungkinkan dan gunakan SplashScreen API untuk memberi merek pada layar pembuka Anda.

Jika Anda perlu menampilkan dialog, sebaiknya tampilkan di atas aktivitas layar pembuka kustom berikutnya atau di atas aktivitas utama setelah layar pembuka sistem.

Menghapus Aktivitas layar pembuka kustom

Secara umum, sebaiknya hapus Activity layar pembuka kustom sebelumnya untuk menghindari duplikasi layar pembuka, untuk meningkatkan efisiensi, dan untuk mengurangi waktu pemuatan layar pembuka. Ada berbagai teknik yang dapat Anda gunakan agar tidak menampilkan aktivitas layar pembuka yang berlebihan.

  • Gunakan pemuatan lambat untuk komponen, modul, atau library Anda. Hindari memuat atau menginisialisasi komponen atau library yang tidak diperlukan agar aplikasi berfungsi saat peluncuran. Muat nanti, saat aplikasi membutuhkannya.

    Jika aplikasi Anda benar-benar memerlukan komponen agar berfungsi dengan baik, muat komponen hanya jika benar-benar diperlukan dan bukan pada waktu peluncuran, atau gunakan thread latar belakang untuk memuatnya setelah aplikasi dimulai. Coba untuk membuat Application.onCreate() Anda seringan mungkin.

    Anda juga dapat memanfaatkan library Startup Aplikasi untuk menginisialisasi komponen saat aplikasi dimulai. Saat melakukannya, pastikan untuk tetap memuat semua modul yang diperlukan untuk aktivitas awal dan tidak menyebabkan jank saat modul yang dimuat dengan lambat tersedia.

  • Buat placeholder saat memuat data dalam jumlah kecil secara lokal. Gunakan pendekatan tema yang direkomendasikan dan tahan rendering hingga aplikasi siap. Untuk menerapkan layar pembuka yang kompatibel dengan versi lama, ikuti langkah-langkah yang diuraikan dalam Mempertahankan layar pembuka di layar untuk waktu yang lebih lama.

  • Tampilkan placeholder. Untuk pemuatan berbasis jaringan dengan durasi yang tidak pasti, tutup layar pembuka dan tampilkan placeholder untuk pemuatan asinkron. Pertimbangkan untuk menerapkan animasi yang ringan ke area konten yang mencerminkan status pemuatan. Pastikan struktur konten yang dimuat cocok dengan struktur kerangka serta mungkin untuk mendukung transisi yang lancar saat konten dimuat.

  • Gunakan penyimpanan dalam cache. Saat pengguna membuka aplikasi untuk pertama kalinya, Anda dapat menampilkan indikator pemuatan untuk beberapa elemen UI, seperti ditunjukkan dalam gambar berikut. Saat pengguna kembali ke aplikasi, Anda dapat menampilkan konten yang disimpan dalam cache ini saat memuat konten yang lebih baru.

Gambar 1. Menampilkan placeholder UI.