Jika Anda menerapkan layar pembuka kustom di Android 11 atau yang lebih lama, migrasikan
aplikasi ke SplashScreen
API untuk membantu
memastikan aplikasi ditampilkan dengan benar di Android 12 dan yang lebih baru.
Mulai Android 12, sistem 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 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 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 dokumen ini. Setelah Anda bermigrasi, API akan meningkatkan waktu startup, memberikan kontrol penuh atas pengalaman layar pembuka, dan menciptakan pengalaman peluncuran yang lebih konsisten dengan aplikasi lain di platform.
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 library
compat.
Jika Anda bermigrasi menggunakan API SplashScreen
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 melakukan migrasi 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 khusus Activity
. SplashScreen
API juga mengurangi latensi
startup yang diperkenalkan dengan aktivitas layar pembuka khusus.
Untuk memigrasikan layar pembuka, lakukan tindakan 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 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 atributwindowSplashScreenIconBackground
.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"> ...
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 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 layar pembuka
Setelah Anda bermigrasi ke layar pembuka untuk Android 12 dan yang lebih baru, tentukan tindakan
yang akan dilakukan dengan layar pembuka kustom Activity
sebelumnya. Anda memiliki opsi
berikut:
- Menyimpan aktivitas kustom, tetapi mencegahnya ditampilkan.
- Mempertahankan aktivitas kustom karena alasan branding.
- Hapus aktivitas kustom dan sesuaikan aplikasi Anda sesuai kebutuhan.
Mencegah Aktivitas kustom ditampilkan
Jika Activity
layar pembuka sebelumnya terutama digunakan untuk pemilihan rute,
pertimbangkan cara menghapusnya. Misalnya, Anda dapat langsung menautkan ke aktivitas
yang sebenarnya atau berpindah ke aktivitas tunggal dengan subkomponen. Jika tidak
memungkinkan, Anda dapat menggunakan
SplashScreen.setKeepOnScreenCondition
untuk mempertahankan aktivitas pemilihan rute, tetapi menghentikan rendering-nya. 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 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 untuk menandai layar pembuka Anda.
Jika Anda perlu menampilkan dialog, sebaiknya tampilkan dialog tersebut 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 semua Activity
layar pembuka kustom sebelumnya
untuk menghindari duplikasi layar pembuka, meningkatkan efisiensi,
dan mengurangi waktu pemuatan layar pembuka. Ada berbagai teknik
yang dapat Anda gunakan agar aktivitas layar pembuka tidak berlebihan.
Gunakan pemuatan lambat untuk komponen, modul, atau library Anda. Hindari memuat atau menginisialisasi komponen atau library yang tidak diperlukan aplikasi untuk berfungsi saat peluncuran. Muat nanti, saat aplikasi membutuhkannya.
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 App Startup untuk melakukan inisialisasi 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 Membiarkan layar pembuka tetap muncul di layar untuk waktu yang lebih lama.
Tampilkan 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 mendukung transisi yang lancar saat konten dimuat.
Gunakan penyimpanan dalam cache. Saat pengguna membuka aplikasi Anda untuk pertama kalinya, Anda dapat menampilkan indikator pemuatan untuk beberapa elemen UI, seperti yang ditunjukkan pada gambar berikut. Saat pengguna kembali ke aplikasi Anda, Anda dapat menampilkan konten yang disimpan dalam cache ini saat memuat konten yang lebih baru.