2011-10-13 62 views
6

Tôi muốn lưu trạng thái ứng dụng để có thể khôi phục trạng thái ứng dụng sau lần khởi chạy khác. Có tốt hơn không khi sử dụng phương thức onSaveInstanceState và lưu nó vào Bundle hoặc sử dụng SharedPreferences?Android - lưu trạng thái ứng dụng

Cảm ơn

Trả lời

8

Tùy thuộc vào ý định của bạn. Sử dụng onSaveInstanceState() chỉ là một giải pháp hợp lý nếu bạn muốn đảm bảo lưu trạng thái trong khi thay đổi cấu hình và các sự kiện khởi động lại khác. Trong trường hợp bạn nhằm mục đích tiết kiệm thực sự trạng thái của ứng dụng vượt quá vòng đời của ứng dụng, bạn nên cân nhắc sử dụng SharedPreferences hoặc thậm chí có thể sử dụng một cơ sở dữ liệu.

+0

Có, tôi cần có thể khôi phục trạng thái ứng dụng, sau khi khởi động lại xảy ra. Vì vậy, onSaveInstanceState() sẽ là giải pháp tốt nhất – Waypoint

+0

Nếu ứng dụng thực sự bị tắt bởi hệ thống, trạng thái cá thể đã lưu sẽ bị mất. Điều tương tự cũng xảy ra khi tắt thiết bị. Nếu bạn muốn giữ lại trạng thái trong các trường hợp đó, 'onSaveInstanceState()' sẽ không đủ. –

+0

Ồ, cảm ơn, vì vậy SharedPreferences là mục tiêu – Waypoint

1

Tôi có thể không có sườn phát triển tương tự như một số trong những áp phích khác ở đây (tôi đã phát triển nghiêm túc các ứng dụng vì tháng 7 năm 2012), nhưng tôi đã tìm thấy một giải pháp tích hợp SharedPreferences cũng như onSaveInstanceState().

Ứng dụng của tôi có hoạt động màn hình giật gân đọc giá trị từ SharedPreferences và gán chúng cho các biến thích hợp. Ngoài ra, mỗi Activity mà tôi tạo ra có phương thức onSaveInstanceState() của riêng mình và tôi cam kết tất cả dữ liệu tôi cần lưu vào SharedPreferences ở đó, trong mỗi và mọi Activity. Vì onSaveInstanceState() được chạy trước khi một ứng dụng hoặc hoạt động đóng bình thường, nó sẽ sao lưu các giá trị dữ liệu trong tất cả các trường hợp bình thường.

Nó có thể không phải là giải pháp hiệu quả nhất, đặc biệt là trong các ứng dụng lớn hơn với nhiều hoạt động, nhưng theo như thử nghiệm của tôi, nó bảo vệ ứng dụng của bạn khỏi mất dữ liệu 99% thời gian.

Nếu một nhà phát triển có kinh nghiệm hơn muốn kêu gọi và xác nhận hoặc từ chối điều này, tôi chắc chắn nó sẽ làm phong phú thêm câu hỏi và câu trả lời.

+0

Tôi biết điều này là cũ, nhưng đối với người đọc trong tương lai: 'onSaveInstanceState' không được chạy trước khi Ứng dụng hoặc Hoạt động đóng cửa bình thường. Nó chạy trước khi Ứng dụng hoặc Hoạt động bị tắt bởi Hệ thống (ví dụ: thay đổi hướng, bộ nhớ thấp, chuyển sang nền). Một trường hợp quan trọng khi nó không được gọi là khi Người dùng thoát Hoạt động bằng cách nhấn nút quay lại – bcorso

Các vấn đề liên quan