Jika Anda menerapkan layar pembuka kustom di Android 11 atau yang lebih lama, migrasikan
aplikasi ke SplashScreen
API untuk membantu
memastikannya ditampilkan dengan benar di Android 12 dan yang lebih baru.
Mulai Android 12, sistem menerapkan pembuka default sistem Android
layar aktif
dingin dan hangat
dimulai untuk semua aplikasi. Secara {i>default<i},
layar pembuka sistem ini dibuat menggunakan elemen ikon peluncur aplikasi Anda
dan windowBackground
properti
tema, jika hanya satu warna.
Jika Anda tidak memigrasikan aplikasi, pengalaman peluncuran aplikasi di Android 12 dan mungkin akan menurun atau memiliki hasil yang tidak diharapkan.
Jika layar pembuka yang ada diimplementasikan menggunakan tema kustom yang menggantikan
android:windowBackground
, sistem akan mengganti layar pembuka kustom Anda dengan sistem Android default layar pembuka di Android 12 dan yang lebih baru. Aplikasi ini mungkin tidak dimaksudkan pengalaman yang lancar bagi developer.Jika layar pembuka yang ada diimplementasikan menggunakan
Activity
khusus, meluncurkan aplikasi di perangkat yang menjalankan Android 12 atau yang lebih baru akan menghasilkan layar pembuka duplikat: layar pembuka sistem diikuti dengan aktivitas layar pembuka yang ada.
Anda dapat mencegah penurunan kualitas pengalaman atau tidak diinginkan dengan menyelesaikan proses migrasi yang dijelaskan dalam dokumen ini. Setelah Anda bermigrasi, API meningkatkan waktu startup, memberi Anda kontrol penuh atas pengalaman layar pembuka, serta menciptakan pengalaman peluncuran yang lebih konsisten dengan aplikasi lain di platform ini.
Library compat SplashScreen
Anda dapat menggunakan API SplashScreen
secara langsung, tetapi sebaiknya gunakan
Androidx SplashScreen
library 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 compat
library.
Jika Anda bermigrasi menggunakan SplashScreen
API secara langsung di Android 11 dan yang lebih lama
layar pembuka Anda akan terlihat sama persis sebelum migrasi. Mulai tanggal
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 layar pembuka yang sudah ada implementasi 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 panduan
yang dijelaskan dalam dokumen ini untuk mengadaptasi
layar pembuka yang disesuaikan Activity
. SplashScreen
API juga mengurangi startup
latensi yang muncul dengan aktivitas layar pembuka khusus.
Untuk memigrasikan layar pembuka, lakukan langkah berikut:
Dalam file
build.gradle
, ubahcompileSdkVersion
dan sertakan library compatSplashScreen
dalam dependensi.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Buat tema dengan induk
Theme.SplashScreen
. Tetapkan nilaipostSplashScreenTheme
ke tema yang harus digunakanActivity
dan nilaiwindowSplashScreenAnimatedIcon
ke drawable atau animasi yang dapat digambar. 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 atributwindowSplashScreenIconBackground
.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"> ...
Panggil
installSplashScreen
di aktivitas awal sebelum memanggilsuper.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 secara opsional dapat Anda
digunakan untuk menyesuaikan animasi atau membuat layar pembuka di layar lebih lama
durasi. Untuk detail selengkapnya tentang menyesuaikan animasi, lihat
Membiarkan layar pembuka tetap 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
dengan layar pembuka kustom Anda sebelumnya, Activity
. Anda memiliki
opsi:
- Simpan aktivitas kustom, tetapi cegah agar tidak ditampilkan.
- Pertahankan aktivitas kustom karena alasan branding.
- Hapus aktivitas kustom dan sesuaikan aplikasi Anda sesuai kebutuhan.
Mencegah Aktivitas kustom ditampilkan
Jika layar pembuka Anda sebelumnya, Activity
terutama
digunakan untuk perutean,
pertimbangkan cara untuk menghapusnya. Misalnya, Anda dapat langsung menautkan ke
aktivitas atau berpindah ke aktivitas tunggal dengan subkomponen. Jika ini bukan
memungkinkan, Anda dapat
SplashScreen.setKeepOnScreenCondition
untuk menjaga aktivitas perutean tetap di tempatnya tetapi
menghentikan rendering aktivitas tersebut. Tindakan ini
mentransfer layar pembuka ke aktivitas berikutnya dan mendukung
transisi.
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 layar pembuka sebelumnya Activity
untuk alasan branding, Anda
dapat beralih dari layar pembuka sistem ke layar pembuka kustom Anda
Activity
dengan menyesuaikan animasi untuk menutup pembuka
layar.
Namun, sebaiknya hindari skenario ini jika memungkinkan dan gunakan SplashScreen
API untuk menandai layar pembuka Anda.
Jika Anda perlu menampilkan dialog, kami sebaiknya menampilkannya di aktivitas layar pembuka kustom berikutnya atau di atas aktivitas utama setelah layar pembuka sistem.
Menghapus Aktivitas layar pembuka kustom
Secara umum, sebaiknya hapus layar pembuka kustom Anda sebelumnya Activity
untuk menghindari duplikasi layar pembuka, untuk meningkatkan efisiensi,
dan untuk mengurangi waktu pemuatan layar pembuka. Ada berbagai teknik yang
yang dapat digunakan agar Anda tidak menampilkan
aktivitas layar pembuka yang berlebihan.
Gunakan pemuatan lambat untuk komponen, modul, atau library. Hindari memuat atau menginisialisasi komponen atau pustaka yang tidak diperlukan oleh aplikasi untuk bekerja saat peluncuran. Muat nanti, saat aplikasi membutuhkannya.
Jika aplikasi Anda benar-benar membutuhkan komponen agar berfungsi dengan baik, muat komponen itu hanya ketika sangat 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 Peluncuran Aplikasi untuk menginisialisasi komponen pada saat memulai aplikasi. Saat melakukannya, pastikan untuk tetap memuat semua modul yang diperlukan untuk aktivitas awal dan tidak menimbulkan jank modul yang dimuat dengan lambat akan tersedia.
Buat placeholder saat memuat data dalam jumlah kecil secara lokal. Gunakan pendekatan tema yang direkomendasikan dan menahan rendering hingga aplikasi siap. Untuk menerapkan layar pembuka yang kompatibel dengan versi sebelumnya, ikuti langkah-langkah yang diuraikan dalam Tempatkan layar pembuka di layar untuk waktu yang lebih lama.
Tampilkan placeholder. Untuk pemuatan berbasis jaringan dengan durasi yang tidak tentu, menutup layar pembuka dan menampilkan placeholder untuk pemuatan asinkron. Pertimbangkan untuk menerapkan animasi yang ringan ke area konten yang mencerminkan status pemuatan. Pastikan bahwa struktur konten yang dimuat sesuai dengan struktur kerangka serta mendukung transisi yang mulus saat konten dimuat.
Gunakan penyimpanan dalam cache. Saat pengguna membuka aplikasi untuk pertama kalinya, Anda dapat menampilkan indikator pemuatan untuk beberapa elemen UI, seperti yang ditunjukkan di gambar berikut. Tujuan saat pengguna kembali ke aplikasi Anda, Anda bisa menampilkan konten yang di-cache ini saat Anda memuat konten yang lebih baru.