Những gì để tiết kiệm và những gì không?
Bạn đã bao giờ tự hỏi tại sao văn bản trong EditText
được lưu tự động trong khi thay đổi hướng? Vâng, câu trả lời này là dành cho bạn.
Khi một phiên bản của Hoạt động bị hủy và Hệ thống sẽ tạo lại một phiên bản mới (ví dụ: thay đổi cấu hình). Nó cố gắng tạo lại nó bằng cách sử dụng một tập hợp dữ liệu đã lưu của Trạng thái hoạt động cũ ( trạng thái thể hiện ).
Trạng thái sơ thẩm là một tập hợp các cặp khóa-giá trị được lưu trữ trong một Bundle
đối tượng.
Theo mặc định, Hệ thống lưu các đối tượng Xem trong Gói chẳng hạn.
- Văn bản trong
EditText
- Vị trí cuộn trong a
ListView
, v.v.
Nếu bạn cần một biến khác được lưu dưới dạng một phần của trạng thái thể hiện, bạn nên phương thức QUÁ HẠN onSavedInstanceState(Bundle savedinstaneState)
.
Ví dụ: int currentScore
trong GameActivity
Chi tiết hơn về onSattedInstanceState (Gói đã lưu trong tài khoản) trong khi lưu dữ liệu
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Vì vậy, do nhầm lẫn nếu bạn quên gọi
super.onSaveInstanceState(savedInstanceState);
hành vi mặc định sẽ không hoạt động tức là Văn bản trong EditText sẽ không lưu.
Lựa chọn nào để khôi phục trạng thái Hoạt động?
onCreate(Bundle savedInstanceState)
HOẶC LÀ
onRestoreInstanceState(Bundle savedInstanceState)
Cả hai phương thức đều có cùng một đối tượng Bundle, vì vậy việc bạn viết logic khôi phục của bạn không thực sự quan trọng. Sự khác biệt duy nhất là trong onCreate(Bundle savedInstanceState)
phương thức bạn sẽ phải kiểm tra null trong khi không cần thiết trong trường hợp sau. Các câu trả lời khác đã có đoạn mã. Bạn có thể giới thiệu họ.
Chi tiết hơn về onRestoreInstanceState (Gói đã lưu trong tài khoản)
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from the saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
Luôn gọi super.onRestoreInstanceState(savedInstanceState);
để Hệ thống khôi phục cấu trúc xem theo mặc định
Tặng kem
Các onSaveInstanceState(Bundle savedInstanceState)
được gọi bởi hệ thống chỉ khi người dùng có ý định quay trở lại hoạt động. Ví dụ: bạn đang sử dụng App X và đột nhiên bạn nhận được một cuộc gọi. Bạn di chuyển đến ứng dụng người gọi và quay lại ứng dụng X. Trong trường hợp này,onSaveInstanceState(Bundle savedInstanceState)
phương thức sẽ được gọi.
Nhưng hãy xem xét điều này nếu người dùng nhấn nút quay lại. Giả định rằng người dùng không có ý định quay lại Hoạt động, do đó trong trường hợp onSaveInstanceState(Bundle savedInstanceState)
này sẽ không được hệ thống gọi ra. Điểm là bạn nên xem xét tất cả các kịch bản trong khi lưu dữ liệu.
Các liên kết có liên quan:
Bản demo về hành vi mặc định
Tài liệu chính thức của Android .