Pertanyaan Apakah pandangan "GONE" merugikan kinerja?


Saya sedang membuat aplikasi yang mungkin dapat menghemat waktu memiliki tata letak tunggal untuk beberapa aktivitas, dengan beberapa tampilan diatur ke GONE bergantung pada aktivitas yang digunakan.

Saya tahu bahwa memiliki banyak tampilan dalam tata letak dapat menyebabkan kinerja yang buruk. Jika saya memiliki aktivitas dengan jumlah penayangan yang banyak, tetapi sebagian besar dari pandangan itu adalah ke GONE, apakah kegiatan ini masih berkinerja buruk. Artinya, apakah tampilan yang disetel ke GONE berkontribusi pada kinerja yang semakin buruk? Jika ya, apakah mereka menuntut kekuatan pemrosesan yang lebih sedikit daripada tampilan yang LUAR BIASA atau TIDAK SENGAJA?

Terima kasih!


32
2017-07-26 14:09


asal


Jawaban:


Hal pertama yang harus Anda ketahui tentang pergi vs tidak terlihat:

  • View.GONE Pandangan ini tidak terlihat, dan tidak membutuhkan ruang untuk keperluan tata letak.
  • View.INVISIBLE Pandangan ini tidak terlihat, tetapi masih membutuhkan ruang untuk tujuan tata letak.

Berpikir tentang dampak pada pengukuran.   Yang mana yang lebih efisien semua tergantung pada seberapa sering Anda   mengubah visibilitas tampilan.

Misalnya, jika tampilan tidak terlihat untuk sebagian besar waktu,   menjadikannya GONE mungkin akan lebih efisien, karena sistem   tidak akan perlu mengukur dan memaparkan pandangan tak terlihat Anda   kapan pun perlu menyesuaikan tampilan lain di layar.

Di sisi lain, jika tampilan berubah antara terlihat dan tidak terlihat   sering, Anda mungkin mendapatkan kinerja yang lebih baik dari TERLIHAT seperti Anda   akan berpotensi menghindari ukuran / tata letak tambahan pada setiap transisi.


24
2017-07-26 14:15



Ini jawaban yang menarik. Saya bertanya-tanya hal yang sama seperti Anda, dan jawabannya adalah itu View.GONE mengkonsumsi lebih banyak memori daripada sekadar menelepon removeView(view) pada tampilan. Namun, GONE tampilan mengkonsumsi lebih sedikit memori daripada View.VISIBLE karena mereka tidak perlu ditarik.

Jumlah memori dibandingkan seperti ini:

View.VISIBLE > View.GONE > removing the view from the container

Apa yang saya lakukan adalah penggunaan View.GONE pada tampilan yang tidak mengkonsumsi banyak memori (seperti TextView) dan gunakan parent.removeView(view) pada tampilan yang banyak memori (seperti WebView);


9
2017-07-26 14:16