7

Trong Android, khi hướng màn hình thay đổi (giữa ngang và dọc), phương thức onCreate được gọi, nếu không được xử lý đúng cách, sẽ tạo lại toàn bộ hoạt động khi kết quả quá đơn giản thay đổi bố cục và giữ lại tất cả các thông tin tương tự.Android: Xử lý xoay màn hình hiệu quả

Tôi biết một số cách để giải quyết vấn đề này, nhưng tôi quan tâm đến cách hiệu quả nhất.

1) Cho biết tệp kê khai mà tôi sẽ xử lý thay đổi hướng bằng cách ghi đè phương thức và để trống.

2) ghi đè onSaveInstanceState() và lưu dữ liệu vào đây để được repopulated trong onCreate()

3) Override onPause() mà sẽ tạo ra một bó của dữ liệu và gửi nó đến onSaveInstanceState()

Rõ ràng, đây là tất cả các tùy chọn, nhưng cái nào là phương pháp hay hơn (số lượng nhỏ, trung bình, lớn)

Cảm ơn bạn

+1

Một cách là bạn có thể ngừng tạo lại Hoạt động và chỉ cần chuyển đổi giữa bố cục dọc và ngang. Kiểm tra câu trả lời của tôi [ở đây] (http://stackoverflow.com/questions/7749675/how-to-stop-changing-the-orientation-when-a-progress-bar-is-spinning-in-android/7749727#7749727) –

+0

Mặc dù cách này dường như hoạt động tốt, tôi muốn có thể sử dụng tính năng tự động thay đổi trong bố cục bằng cách sử dụng thư mục 'res/layout-land'. Trừ khi tất nhiên nó là quá nhiều chi phí cho một hoạt động đơn giản. – Sababado

+0

Vâng, điều này sẽ tự động thay đổi bố cục của nó, bạn chỉ cần thay đổi contentview trong mã đó. –

Trả lời

13

Một số cấu hình thiết bị có thể thay đổi trong thời gian chạy (chẳng hạn như hướng màn hình, tính khả dụng của bàn phím và ngôn ngữ). Khi có thay đổi như vậy, Android khởi động lại Hoạt động đang chạy (onDestroy() được gọi, tiếp theo là onCreate()).

  • Để xử lý đúng đắn khởi động lại, điều quan trọng là hoạt động của bạn khôi phục trạng thái trước đó thông qua vòng đời Hoạt động bình thường, trong mà Android gọi onSaveInstanceState() trước khi nó phá hủy hoạt động của bạn để bạn có thể lưu dữ liệu về các ứng dụng tiểu bang. Sau đó, bạn có thể khôi phục trạng thái trong thời gian onCreate() hoặc onRestoreInstanceState().

Tuy nhiên, bạn có thể gặp phải tình huống khởi động lại ứng dụng và khôi phục lượng dữ liệu đáng kể và tạo trải nghiệm người dùng kém. Trong một tình huống như vậy, bạn có hai lựa chọn khác:

  1. Retain an object during a configuration change

    phép hoạt động của bạn khởi động lại khi thay đổi cấu hình, nhưng mang một Object stateful để các trường hợp mới hoạt động của bạn.

  2. Handle the configuration change yourself

    Ngăn chặn hệ thống từ khởi động lại hoạt động của bạn trong những thay đổi cấu hình nhất định, nhưng nhận được một cuộc gọi lại khi cấu hình làm thay đổi, do đó bạn có thể tự cập nhật hoạt động của bạn khi cần thiết.

Vì vậy, Như cho mỗi hoạt động dữ liệu của bạn và bờ biển trải nghiệm người dùng với ứng dụng mà bạn có thể chọn những gì là tốt nhất cho bạn ..

EDIT: Theo nhu cầu của bạn cho chỉ cần thay đổi cách bố trí tôi nghĩ bạn phải sử dụng và thực hiện các thay đổi trong đó.

+0

Điều này áp dụng như thế nào với các đoạn? –