Saya telah menulis beberapa file tata letak tempat saya menggunakan layout_weight
atribut untuk membuat rasio antara tampilan yang berbeda.
Pada titik tertentu, saya mulai mendapatkan peringatan serat tentang bobot bersarang.
Jadi, saya bertanya-tanya mengapa bobot bersarang buruk untuk kinerja, dan jika ada cara yang lebih efisien untuk membuat rasio konstan antara dimensi tampilan yang dapat digunakan untuk ukuran layar yang berbeda dan yang tidak perlu menentukan banyak dimensi nilai dpi beberapa file tata letak (untuk ukuran layar yang berbeda, maksud saya).
Terima kasih!
android
android-layout
performance
MobileCushion
sumber
sumber
Jawaban:
Bobot bersarang buruk untuk kinerja karena:
Lebih baik menggunakan RelativeLayout s dan menyesuaikan tampilan Anda sesuai dengan tempat-tempat pandangan lain tanpa menggunakan nilai dpi tertentu.
sumber
Pembaruan: Seperti yang kita ketahui, pustaka dukungan persen tidak digunakan lagi di API level 26.
ConstraintLayout
adalah cara baru untuk mencapai struktur flat xml yang sama.Proyek Github yang Diperbarui
Sampel yang diperbarui:
Pembaruan: Kabar baik android dukungan perpustakaan persen memecahkan masalah kinerja kami dan bersarang berantakan tertimbang
LinearLayout
Pertimbangkan tata letak sederhana ini untuk menunjukkan hal yang sama.
Penghindaran kinerja yang terhindar bersarang
LinearLayout
dengan bobot. Sangat mengagumkan !!!.sumber
Saya pikir (dan saya mungkin akan dinyalakan untuk ini), tetapi sekali lagi saya pikir ponsel saya memiliki prosesor quad core untuk menyaingi (jika tidak benar-benar menghancurkan) kebanyakan orang di rumah PC.
Saya juga berpikir kemampuan perangkat keras semacam ini adalah masa depan ponsel.
Jadi saya sampai pada kesimpulan, bahwa selama Anda tidak terbawa oleh sarang (dalam MHO tata letak tidak boleh lebih dari 4 level, dan jika Anda salah melakukannya), ponsel Anda bisa kurang peduli tentang memiliki bobot.
Ada banyak hal yang dapat Anda lakukan yang akan memiliki efek jangkauan jauh lebih jauh pada kinerja, kemudian mengkhawatirkan prosesor Anda melakukan beberapa matematika tambahan.
(harap dicatat bahwa saya menjadi sedikit lucu, jadi jangan menganggap serius posting ini, selain itu ada ide lain yang harus Anda optimalkan terlebih dahulu, dan mengkhawatirkan berat badan sekitar 2-3 level tidak membantu) kesehatanmu)
sumber
Alasan utama mengapa bobot bersarang buruk adalah ketika tata letak memiliki anak dengan berat, itu harus diukur dua kali (saya pikir ini disebutkan dalam peringatan serat). Ini berarti bahwa tata letak berbobot yang juga berisi tata letak tertimbang harus diukur empat kali, dan setiap 'lapisan' bobot yang Anda tambahkan menambah ukuran dengan kekuatan dua.
Dalam ICS (API level 14)
GridLayout
ditambahkan, yang memungkinkan solusi sederhana dan 'rata' untuk banyak tata letak yang sebelumnya membutuhkan bobot. Jika Anda mengembangkan untuk versi Android yang lebih lama, Anda akan memiliki waktu yang sedikit lebih sulit untuk menghilangkan beban, tetapi menggunakanRelativeLayout
dan meratakan sebanyak mungkin tata letak Anda ke dalam kabin itu biasanya menghilangkan banyak beban yang bersarang.sumber
GridLayout
atauRelativeLayout
. Misalnya untukGridLayout
: "GridLayout tidak memberikan dukungan untuk prinsip berat, seperti yang didefinisikan dalam berat. Secara umum, oleh karena itu, tidak mungkin untuk mengkonfigurasi GridLayout untuk mendistribusikan ruang berlebih di antara beberapa komponen."Ada solusi mudah untuk menghindari LinearLayout bersarang dengan bobot - cukup gunakan Tablelayout dengan weighSum dan LinearLayout bersarang dengan weightSum - Tablelayout memiliki atribut yang sama dengan LinearLayout (orientasi, weightSum, layout_weight, dll.) Dan tidak menampilkan pesan - "nested weights buruk untuk kinerja "
Contoh:
sumber
Saya pikir, satu-satunya alternatif adalah membuat fungsi yang akan dipanggil padaResume dan akan mengatur semua ukuran dan posisi. Ngomong-ngomong, berdasarkan berat, Anda hanya dapat mengatur ukuran tetapi tanpa bantalan (sehingga tata letak menjadi lebih rumit), tanpa ukuran teks (mustahil untuk mengompensasi ini entah bagaimana), apalagi hal-hal seperti jumlah baris.
sumber