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

Jika sebelumnya telah menerapkan layar pembuka kustom di Android 11 atau yang lebih lama, Anda harus memigrasikan aplikasi ke API SplashScreen untuk memastikannya ditampilkan dengan benar di Android 12 dan yang lebih baru.

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

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

  • Jika layar pembuka yang ada diterapkan menggunakan tema khusus yang menggantikan android:windowBackground, sistem akan mengganti layar pembuka kustom dengan layar pembuka sistem Android default di Android 12 dan yang lebih baru (yang 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 baru tampilan, diikuti dengan aktivitas layar pembuka yang ada.

Anda dapat mencegah pengalaman yang menurun atau tidak diinginkan ini dengan menyelesaikan proses migrasi yang dijelaskan dalam panduan in. Setelah Anda bermigrasi, API baru akan meningkatkan waktu startup, memberikan kontrol penuh atas pengalaman layar pembuka, dan memastikan pengalaman peluncuran yang lebih konsisten dengan aplikasi lain di platform.

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. Panduan ini ditulis menggunakan library compat.

Jika Anda memilih untuk bermigrasi menggunakan API SplashScreen secara langsung, di Android 11 dan menurunkan tampilan layar pembuka menjadi sama persis seperti sebelumnya; mulai di Android 12, layar pembuka akan memiliki tampilan dan nuansa Android 12 yang baru.

Memigrasikan implementasi layar pembuka Anda

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

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

Setelah melakukan migrasi menggunakan library compat SplashScreen, sistem akan menampilkan layar pembuka yang sama di semua versi Android.

Untuk memigrasikan layar pembuka:

  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, dan tetapkan nilai postSplashScreenTheme ke tema yang harus digunakan oleh Activity dan windowSplashScreenAnimatedIcon ke drawable atau drawable yang dianimasi. 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 either 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. -->
       <!-- 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. Di 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 untuk 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 pengalaman layar pembuka baru

Setelah Anda melakukan migrasi ke pengalaman layar pembuka baru untuk Android 12 dan yang lebih baru, layar pembuka kustom Activity masih ada, sehingga Anda harus memilih tindakan yang dapat dilakukan pada layar pembuka tersebut. Anda memiliki opsi berikut:

  • Menyimpan aktivitas kustom, tetapi mencegahnya ditampilkan
  • Mempertahankan aktivitas kustom karena alasan branding
  • Menghapus aktivitas kustom dan menyesuaikan aplikasi sesuai kebutuhan

Mencegah Aktivitas kustom ditampilkan

Jika Activity layar pembuka yang ada terutama digunakan untuk pemilihan rute, pertimbangkan cara menghapusnya; misalnya, Anda mungkin langsung menautkan ke aktivitas yang sebenarnya atau berpindah ke aktivitas tunggal dengan subkomponen. Jika tidak memungkinkan, Anda dapat menggunakan SplashScreen#setKeepOnScreenCondition untuk mempertahankan aktivitas perutean tetapi menghentikan rendering-nya. Dengan melakukannya, layar pembuka akan ditransfer ke aktivitas berikutnya dan memungkinkan 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 berikutnya untuk pengalaman branding, Anda dapat beralih dari layar pembuka sistem ke layar pembuka Activity kustom dengan menyesuaikan animasi untuk menutup layar pembuka. Namun, sebaiknya hindari skenario ini jika memungkinkan dan gunakan SplashScreen API baru untuk menandai layar pembuka Anda.

Menghapus Aktivitas layar pembuka kustom

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

  • Pemuatan lambat komponen, modul, atau library: Hindari memuat atau menginisialisasi komponen atau library yang tidak diperlukan aplikasi untuk bekerja saat peluncuran, dan memuatnya nanti saat aplikasi membutuhkan itu.

    Jika aplikasi Anda benar-benar memerlukan komponen agar berfungsi dengan baik, muat komponen hanya jika sebenarnya diperlukan dan tidak 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 Anda tetap memuat semua modul yang diperlukan untuk aktivitas awal dan tidak menampilkan jank saat modul yang dimuat dengan lambat tersedia.

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

  • Menampilkan placeholder: Untuk pemuatan berbasis jaringan dengan durasi yang tidak tentu, 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 sebisa mungkin untuk memungkinkan transisi yang lancar, setelah konten dimuat.

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

    Gambar 1: Menampilkan placeholder UI