Mengoptimalkan Hierarki Tata Letak

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 berisi ImageView dan TextView 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 atau GridLayout 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.