Seperti yang kita semua ketahui, banyak aplikasi Android menampilkan layar putih dengan sangat singkat sebelum aplikasi pertama Activity
difokuskan. Masalah ini diamati dalam kasus berikut:
Aplikasi Android yang memperluas
Application
kelas global dan melakukan inisialisasi utama di dalamnya. TheApplication
objek selalu dibuat sebelum pertamaActivity
(sebuah fakta yang dapat diamati di debugger), jadi ini masuk akal. Inilah penyebab keterlambatan dalam kasus saya.Aplikasi Android yang menampilkan jendela pratinjau default sebelum splash screen.
Pengaturan android:windowDisablePreview = "true"
jelas tidak berfungsi di sini. Saya juga tidak dapat menyetel tema induk layar splash Theme.Holo.NoActionBar
seperti yang dijelaskan di sini , karena [sayangnya] layar splash saya menggunakan file ActionBar
.
Sementara itu, aplikasi yang tidak memperluas Application
kelas tidak menampilkan layar putih saat pengaktifan.
Masalahnya, idealnya inisialisasi yang dilakukan di Application
objek perlu terjadi sebelum yang pertama Activity
ditampilkan. Jadi pertanyaan saya adalah, bagaimana saya bisa melakukan inisialisasi ini pada startup aplikasi tanpa menggunakan Application
objek? Mungkin menggunakan Thread
atau Service
, saya kira?
Ini adalah masalah yang menarik untuk dipikirkan. Saya tidak dapat mem-bypassnya dengan cara biasa (dengan mengatur NoActionBar
tema), karena tragisnya layar Splash saya sebenarnya memiliki ActionBar
beberapa alasan yang tidak terkait.
catatan:
Saya telah merujuk pada pertanyaan-pertanyaan berikut:
Bagaimana cara memperbaiki layar putih pada aplikasi Start up?
Mengapa ada layar putih muncul selama 1 detik saat mulai menjalankan aplikasi di Android?
Referensi:
Application
kelas. Hal ini disebabkan oleh cara Android yang lebih baru untuk "memulai secara dingin" aplikasi. Google sebenarnya membahas waktu peluncuran di Google I / O tahun ini dan itu akan diperbaiki di N dari yang saya ingat. Sementara itu, Anda harus melihat apa yang disebut Google sebagai "layar peluncuran bermerek". Berikut adalah contoh cara membuatnya: antonioleiva.com/branded-launch-screen - tidak ada lagi layar putih di awal ;-) Dan tolong jangan gunakan splashscreens - itu mengganggu pengguna.Jawaban:
Masalah dengan latar belakang putih disebabkan karena android mulai dingin saat aplikasi dimuat ke memori, dan ini dapat dihindari dengan ini:
tata letak
img wajah
Tambahkan tema ini ke layar splash Anda di manifes
yang akan menghasilkan efek seperti ini
untuk lebih jelasnya dan lebih banyak solusi anda bisa cek BlogPost ini
sumber
tolong tambahkan baris ini ke dalam tema aplikasi Anda
untuk informasi lebih lanjut: https://developer.android.com/topic/performance/vitals/launch-time#themed
sumber
Silakan salin dan tempel dua baris ini di tema aplikasi manifes Anda, yaitu res / styles / AppTheme. maka itu akan bekerja seperti pesona ..
sumber
Pertama-tama, untuk menghilangkan layar putih, baca ini - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Namun yang lebih penting, optimalkan beban awal Anda dan tunda pekerjaan berat apa pun saat Anda punya waktu untuk menjalankannya. Posting kelas lamaran Anda di sini jika Anda ingin kami melihatnya.
sumber
Cara yang disarankan untuk memecahkan masalah ini tidak ada di jawaban. Jadi saya menambahkan jawaban saya di sini. Masalah layar putih saat memulai terjadi karena layar kosong awal yang dibuat oleh proses sistem saat meluncurkan aplikasi. Cara umum untuk mengatasinya adalah dengan mematikan layar awal ini dengan menambahkan ini ke
styles.xml
file Anda .Namun menurut dokumentasi android hal ini dapat mengakibatkan waktu startup lebih lama. Cara yang disarankan untuk menghindari layar putih awal ini menurut google adalah dengan menggunakan
windowBackground
atribut tema aktivitas dan menyediakan drawable khusus sederhana untuk memulai aktivitas.Seperti ini:
File Tata Letak yang Dapat Digambar,
my_drawable.xml
Ciptakan gaya baru di
styles.xml
Tambahkan tema ini ke aktivitas awal Anda di file Manifest
Dan ketika Anda ingin beralih kembali ke panggilan tema normal Anda
setTheme(R.style.Apptheme)
sebelum meneleponsuper.onCreate()
dansetContentView()
Ini adalah cara yang disarankan untuk memecahkan masalah dan ini dari pola Desain Material google .
sumber
Sudahkah Anda mencoba menyetel
android:windowBackground
atribut dalam tema aktivitas peluncur Anda, ke warna atau drawable?Contohnya begini:
ketika ditambahkan ke peluncur, tema aktivitas akan menampilkan warna hitam (bukan warna putih) saat memulai. Ini adalah trik mudah untuk menyembunyikan inisialisasi yang lama, sambil menunjukkan sesuatu kepada pengguna Anda, dan ini berfungsi dengan baik bahkan jika Anda membuat subkelas objek Application.
Hindari menggunakan konstruksi lain (bahkan Thread) untuk melakukan tugas-tugas inisialisasi yang lama, karena Anda mungkin akhirnya tidak dapat mengontrol siklus proses konstruksi tersebut. Objek Application adalah tempat yang tepat untuk melakukan persis jenis tindakan ini.
sumber
Saya menambahkan dua baris berikut dalam tema saya di bawah styles.xml
Bekerja seperti pesona
sumber
Saya memiliki masalah yang sama, Anda harus memperbarui gaya Anda.
style.xml
File manifes Anda akan terlihat seperti di bawah ini.
Keluar keluar:
Semoga ini bisa membantu Anda.
sumber
Dalam metode callback daur hidup, Anda bisa mendeklarasikan bagaimana aktivitas Anda berperilaku saat pengguna keluar dan masuk kembali ke aktivitas. Ingatlah bahwa cara Android dirancang, ada siklus proses untuk setiap aplikasi. Jika Anda memasukkan terlalu banyak beban ke
onCreate()
metode (yang merupakan metode yang digunakan untuk memuat file tata letak dan mengaktifkan kontrol yang Anda miliki di dalamnya), maka layar putih akan menjadi lebih terlihat, karena file tata letak akan membutuhkan waktu lebih lama untuk dimuat.Saya menyarankan menggunakan beberapa metode berbeda saat memulai suatu kegiatan. Itulah
onStart()
(dipanggil sebagai hal pertama setelah aplikasi dimuat),onActivityCreated()
(dipanggil setelah tata letak ditampilkan dan berguna jika Anda membuat pemrosesan data apa pun saat memulai aktivitas).Untuk memudahkan Anda, di bawah ini adalah diagram siklus hidup aktivitas resmi:
sumber
Activity
, tetapi padaApplication
objek global . Dan saya tidak percaya saya dapat menerapkan pemisahan masalah sepertiActivity
itu di sana, karena tidak seperti itu, ia hanya memilikionCreate()
metode.Application
objek sama sekali dan memindahkan semua kode inisialisasi ke yang pertamaActivity
...Apakah Anda mencoba melakukan inisialisasi
onActivityCreated
?Di dalam
Application
kelas:sumber
Seperti yang sudah Anda ketahui mengapa layar putih ini ada, karena proses latar belakang atau inisialisasi aplikasi atau file besar, jadi periksa saja ide di bawah ini untuk mengatasi hal ini.
Untuk mencegah layar putih ini di awal aplikasi, salah satu caranya adalah layar splash, ini hanya cara yang belum final dan Anda harus menggunakannya.
Ketika Anda akan menampilkan layar splash dari file splash.xml Anda, maka masalah ini juga akan tetap sama,
Jadi Anda harus membuat gaya ont dalam file style.xml untuk layar splash dan di sana Anda harus mengatur latar belakang jendela sebagai gambar splash Anda dan kemudian menerapkan tema itu ke aktivitas splash Anda dari file manifes. Jadi sekarang ketika Anda akan menjalankan aplikasi, pertama-tama itu akan mengatur tema dan dengan cara ini pengguna akan dapat melihat gambar percikan secara langsung, bukan layar putih.
sumber
Kedua properti itu berfungsi
sumber
Silakan coba ini sekali.
1) Buat file splash_background.xml yang dapat digambar
2) Taruh ini di styles.xml
3) Di AndroidMainfest.xml Anda, setel tema di atas ke aktivitas Launch.
sumber
Cukup tulis item di values / styles.xml:
Misalnya, di AppTheme:
sumber
sumber
Bagi siapa pun yang memiliki layar putih tersebut saat men-debug, ketahuilah bahwa jika Anda men-debug, pemuatan akan memakan waktu lebih lama. Jika Anda membuat APK rilis dan menginstalnya di ponsel, Anda akan melihat bahwa dibutuhkan lebih sedikit waktu untuk memuat.
Jadi waktu startup dengan versi debbug tidak sama dengan waktu startup dengan versi rilis.
sumber