it-swarm-id.com

Mengapa tidak selalu menggunakan Android: configChanges = "keyboardHidden | orientasi"?

Saya bertanya-tanya mengapa tidak menggunakan Android:configChanges="keyboardHidden|orientation" dalam setiap (hampir setiap;) aktivitas)?

Barang:

  • tidak perlu khawatir aktivitas Anda sudah dirotasi
  • lebih cepat

Tidak begitu baik:

  • perlu mengubah tata letak Anda jika tergantung pada ukuran layar (mis. tata letak dengan dua kolom atau lebih)

Buruk:

  • tidak ada cara yang fleksibel untuk memiliki tata letak yang berbeda pada orientasi yang berbeda
  • tidak begitu baik saat menggunakan fragmen

Tetapi jika kita tidak menggunakan tata letak yang berbeda, mengapa tidak?

172
Mikooos

Latar Belakang Cepat

Secara default, ketika perubahan konfigurasi tombol tertentu terjadi pada Android (contoh umum adalah perubahan orientasi), Android sepenuhnya memulai kembali Aktivitas yang sedang berjalan untuk membantunya menyesuaikan dengan perubahan tersebut.

Ketika Anda mendefinisikan Android:configChanges="keyboardHidden|orientation" di AndroidManifest Anda, Anda memberi tahu Android: "Tolong jangan lakukan reset default ketika keyboard ditarik keluar, atau telepon diputar; saya ingin menangani ini sendiri. Ya, saya tahu apa yang aku lakukan"

Apakah ini hal yang baik? Kita akan segera melihat ...

Jangan khawatir?

Salah satu pro Anda mulai dengan bahwa ada:

tidak perlu khawatir aktivitas Anda sudah dirotasi

Dalam banyak kasus, orang secara keliru percaya bahwa ketika mereka memiliki kesalahan yang dihasilkan oleh perubahan orientasi ("rotasi"), mereka dapat memperbaikinya dengan memasukkan Android:configChanges="keyboardHidden|orientation".

Namun, Android: configChanges = "keyboardHidden | orientasi" tidak lebih dari seorang bandaid. Sebenarnya, ada banyak cara perubahan konfigurasi dapat dipicu. Misalnya, jika pengguna memilih bahasa baru (mis. Lokal telah berubah), aktivitas Anda akan dimulai kembali dengan cara yang sama dengan perubahan orientasi. Jika mau, Anda dapat melihat daftar semua jenis perubahan konfigurasi .

Edit : Lebih penting lagi, seperti hackbod tunjukkan dalam komentar, aktivitas Anda juga akan dimulai kembali ketika aplikasi Anda di latar belakang dan Android memutuskan untuk membebaskan sebagian memori dengan membunuhnya. Saat pengguna kembali ke aplikasi Anda, Android akan mencoba memulai kembali aktivitas dengan cara yang sama seperti jika ada perubahan konfigurasi lainnya. Jika Anda tidak bisa mengatasinya - pengguna tidak akan senang ...

Dengan kata lain, menggunakan Android:configChanges="keyboardHidden|orientation" bukan solusi untuk "kekhawatiran" Anda. Cara yang benar adalah dengan mengkode aktivitas Anda sehingga mereka senang dengan setiap restart Android melempar mereka. Ini adalah praktik yang baik yang akan membantu Anda, jadi biasakanlah.

Jadi kapan saya harus menggunakannya?

Seperti yang Anda sebutkan ada keuntungan yang berbeda. Menimpa perubahan konfigurasi default untuk rotasi dengan menanganinya sendiri akan mempercepat. Namun, kecepatan ini memang datang dengan harga kenyamanan.

Sederhananya, jika Anda menggunakan tata letak yang sama untuk potret dan lansekap, Anda dalam kondisi yang baik dengan melakukan penulisan ulang. Alih-alih memuat ulang seluruh kegiatan, tampilan hanya akan bergeser untuk mengisi ruang yang tersisa.

Namun , jika karena alasan tertentu Anda menggunakan tata letak yang berbeda saat perangkat dalam lanskap, fakta bahwa Android memuat ulang Aktivitas Anda bagus karena akan memuat tata letak yang benar. [Jika Anda menggunakan penggantian pada Kegiatan seperti itu, dan ingin melakukan tata letak ajaib saat runtime ... well, semoga sukses - itu jauh dari sederhana]

Ringkasan Cepat

Dengan segala cara, jika Android:configChanges="keyboardHidden|orientation" tepat untuk Anda, maka gunakanlah. Tapi TOLONG pastikan untuk menguji apa yang terjadi ketika sesuatu berubah, karena perubahan orientasi bukan satu-satunya cara memulai kembali aktivitas penuh dapat dipicu.

321
yydl

Dari sudut pandang saya: Jika tata letak sama dalam mode lansekap dan potret - Anda mungkin juga menonaktifkan salah satu dari keduanya di aplikasi Anda.

Alasan mengapa saya menyatakan ini adalah bahwa saya sebagai pengguna mengharapkan aplikasi untuk memberi saya beberapa manfaat, ketika saya mengubah orientasi. Jika tidak masalah bagaimana saya memegang ponsel saya, maka saya tidak perlu pilihan.

Ambil contoh aplikasi di mana Anda memiliki ListView, dan setelah mengklik ListItem Anda ingin ditampilkan tampilan detail untuk item itu. Dalam lanskap Anda akan od ini dengan membagi layar menjadi dua, memiliki ListView di sebelah kiri dan tampilan terperinci di sebelah kanan. Di Portrait Anda akan memiliki daftar dalam satu layar dan kemudian mengubah layar ke tampilan detail ketika ListItem dipilih. Dalam hal perubahan orientasi masuk akal serta tata letak yang berbeda.

2
kaspermoerch