Tôi đã sử dụng cả hai phương pháp:Lợi thế của việc cho phép một hoạt động bị phá hủy khi xoay vòng là gì?
- Hãy hoạt động bị phá hủy trên xoay
- Đừng để hoạt động bị phá hủy trên xoay
Tiếp cận của tôi gần như mọi là để nắm bắt những sự kiện xoay và nếu cần thiết, hãy gọi setContentView và thêm lại một số thành phần. Nếu không, chỉ cần để nó xoay và bố trí được thiết kế để thích nghi.
Cho đến nay tôi chỉ thấy lợi thế khi để nó bị phá hủy trên màn hình với cấu trúc rất phức tạp, rất linh động và bất cứ khi nào tôi xoay và không phá hủy, hãy hiển thị một số nhấp nháy khi xây dựng lại màn hình.
Chi phí phải vượt qua trạng thái với onSaveInstance, onRestoreInstace đôi khi rất dễ bị lỗi và tốn thời gian bằng cách nào đó.
Tôi có thiếu gì đó không?
UPDATE:
Tôi không làm bất kỳ loại nếu "Orientation.XPTO == ..." trên mã của tôi. Đây là logic của mỗi 2 cách tiếp cận (mã được tái sử dụng):
Khi phá hủy
onCreate -> DrawUI() setContentView and add views -> fill() add content
Khi không phá hủy:
onCreate -> DrawUI() setContentView and add views -> fill() add content
onRotation -> DrawUI() setContentView and add views -> fill() add content
Khi gọi setContentView sau khi xoay nó sẽ chọn bố cục đúng cho hướng thiết bị (Kiểm tra câu trả lời này của Google Reto Meier https://stackoverflow.com/a/456918/327011)
Và DrawUI và điền sẽ phải có logic cho cả bố cục dọc và ngang khi hoạt động có thể được tạo trên mỗi hai hướng để bắt đầu.
"Nếu khởi động lại hoạt động của bạn yêu cầu bạn khôi phục bộ dữ liệu lớn, thiết lập lại kết nối mạng hoặc thực hiện các hoạt động chuyên sâu khác, thì khởi động lại đầy đủ do thay đổi cấu hình có thể là trải nghiệm người dùng chậm.Ngoài ra, bạn có thể không hoàn toàn khôi phục trạng thái hoạt động của mình bằng 'Bundle' mà hệ thống tiết kiệm cho bạn với cuộc gọi lại' onSaveInstanceState() '- nó không được thiết kế để mang các đối tượng lớn (như bitmap) và dữ liệu bên trong nó phải được tuần tự hóa sau đó deserialized, có thể tiêu thụ rất nhiều bộ nhớ và làm thay đổi cấu hình chậm. " – jnthnjns