Menggunakan struktur tata letak dasar untuk mendapatkan tata letak yang paling efisien adalah suatu kesalahpahaman umum. Namun, setiap widget dan tata letak yang Anda tambahkan ke aplikasi memerlukan inisialisasi, tata letak, dan gambar. Misalnya, menggunakan instance LinearLayout
bertingkat dapat menghasilkan hierarki tampilan yang terlalu dalam. Selain itu, menumpuk beberapa instance LinearLayout
yang menggunakan parameter layout_weight
dapat menjadi operasi yang berat karena setiap turunan harus diukur dua kali. Hal ini terutama penting jika tata letak diperluas berulang kali, seperti saat digunakan dalam ListView
atau GridView
.
Pada tutorial ini, Anda akan belajar menggunakan Hierarchy Viewer dan Lint untuk memeriksa serta mengoptimalkan tata letak.
Memeriksa Tata Letak
Android SDK Tools menyertakan alat bernama Hierarchy Viewer yang memungkinkan Anda menganalisis tata letak saat aplikasi berjalan. Menggunakan alat ini akan membantu Anda menemukan hambatan dalam performa tata letak.
Hierarchy Viewer berfungsi dengan memungkinkan Anda memilih proses yang sedang berjalan pada perangkat atau emulator yang terhubung, lalu menampilkan hierarki tata letak. Lampu traffic di setiap blok merepresentasikan performa Pengukuran, Tata Letak, dan Gambar, yang membantu Anda mengidentifikasi potensi masalah.
Misalnya, gambar 1 menampilkan tata letak yang digunakan sebagai item dalam ListView
.
Tata letak ini menampilkan gambar bitmap kecil di sebelah kiri dan dua item teks yang ditumpuk di sebelah kanan. Penting sekali bagi tata letak yang akan diperluas beberapa kali—seperti tata letak ini—untuk dioptimalkan karena manfaat performanya akan dilipatgandakan.

Gambar 1. Tata letak konseptual untuk item dalam ListView
.
Hierarchy Viewer menampilkan daftar perangkat yang tersedia dan komponennya yang sedang berjalan. Pilih komponen dari tab Windows, lalu klik Hierarchy Viewer untuk melihat hierarki tata letak komponen yang dipilih. Misalnya, gambar 2 menunjukkan tata letak untuk item daftar yang diilustrasikan oleh gambar 1.

Gambar 2. Hierarki tata letak untuk tata letak pada gambar 1, menggunakan instance LinearLayout
bertingkat.
Merevisi Tata Letak
Karena performa tata letak di atas melambat yang dikarenakan LinearLayout
bertingkat, performa mungkin dapat meningkat dengan meratakan tata letak—membuat tata letak menjadi dangkal dan lebar, bukan sempit dan dalam. RelativeLayout
sebagai node root memungkinkan untuk tata letak seperti itu. Jadi, saat desain ini dikonversi untuk menggunakan RelativeLayout
, Anda dapat melihat bahwa tata letak menjadi hierarki 2 tingkat. Pemeriksaan tata letak baru terlihat seperti berikut:

Gambar 4. Hierarki tata letak untuk tata letak pada gambar 1, menggunakan RelativeLayout
.
Manfaatnya, sekecil apa pun kemungkinan yang ada, akan dikalikan beberapa kali karena tata letak ini digunakan untuk setiap item dalam daftar.
Sebagian besar perbedaannya adalah dikarenakan penggunaan layout_weight
dalam desain LinearLayout
, yang dapat memperlambat kecepatan pengukuran. Ini hanyalah salah satu contoh bagaimana setiap tata letak memiliki penggunaan yang sesuai dan Anda harus mempertimbangkan dengan cermat apakah perlu menggunakan bobot tata letak.
Dalam beberapa tata letak yang rumit, sistem mungkin menyia-nyiakan upaya untuk mengukur elemen UI yang sama lebih dari sekali. Fenomena ini disebut taksasi ganda. Untuk informasi selengkapnya tentang taksasi ganda dan cara mencegahnya, lihat Performa dan Hierarki Tampilan.
Menggunakan Lint
Sebaiknya Anda menjalankan alat lint pada file tata letak untuk menelusuri kemungkinan pengoptimalan hierarki tampilan. Lint telah menggantikan alat Layoutopt dan memiliki fungsionalitas yang jauh lebih baik. Beberapa contoh aturan lint adalah:
- Menggunakan drawable gabungan -
LinearLayout
yang berisiImageView
danTextView
dapat ditangani dengan lebih efisien sebagai drawable gabungan. - Menggabungkan frame root - Jika
FrameLayout
adalah root tata letak dan tidak memberikan latar belakang atau padding, dan lain-lain, maka dapat diganti dengan tag penggabungan yang sedikit lebih efisien. - Leaf yang tidak berguna - Tata letak yang tidak memiliki turunan atau latar belakang sering kali dapat dihapus (karena tidak terlihat) untuk hierarki tata letak yang lebih datar dan efisien.
- Induk yang tidak berguna - Tata letak dengan turunan yang tidak memiliki sibling, bukan tata letak
ScrollView
atau tata letak root, dan tidak memiliki latar belakang, dapat dihapus serta turunannya akan langsung dipindahkan ke induk untuk hierarki tata letak yang lebih datar dan efisien. - Tata letak dalam - Tata letak dengan tingkat yang terlalu banyak akan berakibat buruk bagi performa. Pertimbangkan untuk menggunakan tata letak yang lebih datar seperti
RelativeLayout
atauGridLayout
untuk meningkatkan performa. Kedalaman maksimum default adalah 10.
Manfaat lain dari Lint adalah terintegrasi dengan Android Studio. Lint otomatis berjalan setiap kali Anda mengompilasi program. Dengan Android Studio, Anda juga dapat menjalankan pemeriksaan lint untuk varian build tertentu, atau untuk semua varian build.
Anda juga dapat mengelola profil pemeriksaan dan mengonfigurasi pemeriksaan dalam Android Studio dengan opsi File>Settings>Project Settings. Halaman Konfigurasi Pemeriksaan akan muncul bersama pemeriksaan yang didukung.
Gambar 5. Konfigurasi Pemeriksaan
Lint memiliki kemampuan untuk otomatis memperbaiki beberapa masalah, memberikan saran untuk yang lain, dan langsung menuju ke kode yang melanggar untuk ditinjau.
Untuk informasi selengkapnya terkait tutorial ini, lihat Tata Letak XML dan Resource Tata Letak.