Saya bertanya-tanya mengapa tidak digunakan 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 (misalnya 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?
android
android-layout
Mikooos
sumber
sumber
Jawaban:
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 ponsel diputar; saya ingin menangani ini sendiri. Ya, saya tahu apa yang saya lakukan "Apakah ini hal yang baik? Kita akan segera melihat ...
Jangan khawatir?
Salah satu pro Anda mulai dengan bahwa ada:
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 seperti perubahan orientasi. Jika mau, Anda dapat melihat daftar semua jenis perubahan konfigurasi .
Sunting : Lebih penting lagi, seperti yang ditunjukkan oleh hackbod di komentar, aktivitas Anda juga akan dimulai ulang ketika aplikasi Anda ada di latar belakang dan Android memutuskan untuk membebaskan sebagian memori dengan membunuhnya. Saat pengguna kembali ke aplikasi Anda, Android akan mencoba untuk memulai kembali aktivitas dengan cara yang sama jika ada perubahan konfigurasi lainnya. Jika Anda tidak bisa mengatasinya - pengguna tidak akan senang ...
Dengan kata lain, menggunakan
android:configChanges="keyboardHidden|orientation"
bukanlah solusi untuk "kekhawatiran" Anda. Cara yang benar adalah dengan kode aktivitas Anda sehingga mereka senang dengan setiap restart Android melemparnya. 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 lanskap, 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 adalah baik karena kemudian akan memuat tata letak yang benar. [Jika Anda menggunakan override pada Activity seperti itu, dan ingin melakukan tata letak magis saat runtime ... well, semoga sukses - itu jauh dari sederhana]
Ringkasan Cepat
Dengan segala cara, jika cocok
android:configChanges="keyboardHidden|orientation"
untuk Anda, maka gunakanlah. Tetapi tolong pastikan untuk menguji apa yang terjadi ketika sesuatu berubah, karena perubahan orientasi bukan satu-satunya cara memulai kembali aktivitas penuh.sumber
Please don't do the default reset when the keyboard is pulled out
saya belum pernah melihat aktivitas Restart untuk Keyboard menarik !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 telepon 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 lansekap Anda dapat melakukan ini dengan membagi layar menjadi dua, memiliki ListView di sebelah kiri dan tampilan detail 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.
sumber
Saya tidak mengerti mengapa .... restart sesekali ok menurut saya ... configChanges menangani sebagian besar kasus untuk saya ... yah mungkin dalam beberapa jenis aplikasi ini bisa menjadi masalah tapi itu tergantung pada jenis aplikasi dan bagaimana Anda mengembalikan nyatakan kapan aplikasi restart ... Ketika salah satu aplikasi saya restart pengguna login kembali dan aktivitas terakhir dibuka oleh kode saya dan pengguna hanya kehilangan beberapa langkah untuk kembali ke tempatnya semula tetapi bukan masalah besar .. Di beberapa negara lain keadaan selalu bertahan dan beberapa negara selalu dipulihkan saat restart. Ketika aktivitas dimulai kembali itu harus bahwa aplikasi belum pernah digunakan atau sesuatu ... jadi tidak ada masalah sama sekali ... Dalam game misalnya ini bisa menjadi masalah mungkin atau dalam beberapa jenis aplikasi lain yang saya tidak tahu ...
Saya mengatakan bahwa ketika Anda melakukannya dengan cara ini aplikasi berfungsi dengan baik dalam keadaan normal. Dan kode jauh lebih mudah dibaca tanpa banyak logika yang diperlukan untuk menyimpan dan memulihkan di mana Anda hanya dapat membuat bug baru dan harus memeliharanya setiap saat ... pasti jika android kehabisan daya dan membunuh Anda jendela aplikasi Anda kehilangan konteks dan dimulai lagi, tetapi ini terjadi hanya dalam situasi khusus dan pada perangkat yang lebih baru saya yakin ini semakin jarang ...
Jadi bunuh aku, tapi aku menggunakan ini di aplikasi cukup berhasil ... android: configChanges = "lokal | keyboard | keyboardHidden | orientasi | screenLayout | uiMode | screenSize | smallestScreenSize" Tapi saya mengerti bahwa untuk beberapa jenis aplikasi khusus mungkin tidak cara yang baik tetapi sebagian besar aplikasi dapat hidup dengan ini saja OK.
sumber
Ya saya pikir berhenti akan membuatnya lebih cepat daripada melepaskan pemain. Masih ada jeda.
Sekarang telah menemukan solusi yang tidak akan menghentikan lagu.
Nyatakan dalam manifes bahwa Anda akan menangani perubahan konfigurasi untuk orientasi layar dan kemudian menggunakan metode onConfigurationChanged untuk memuat file tata letak. Dengan melakukan ini di logCat saya dapat melihat onPause, onCreate & onResume tidak dipanggil, dan karena itu lagunya tidak dijeda.
perbarui manifes untuk menangani orientasi.
tambahkan kode ini
sumber