2012-03-23 42 views
24

Có ai biết danh sách đầy đủ về thời điểm gói savedInstanceState sẽ được sử dụng trong một hoạt động không?Khi nào gói savedInstanceState thực sự được sử dụng?

Tôi biết nó được sử dụng khi định hướng thiết bị thay đổi. Tuy nhiên, nó dường như không được sử dụng khi người dùng đóng ứng dụng từ cài đặt Android, nhưng điều này có thể là do một cái gì đó trong mã của tôi.

Có trường hợp nào khác?

Để rõ ràng, bằng "đã sử dụng", nghĩa là khi onCreate() được gọi, gói savedInstanceState không phải là rỗng và chứa dữ liệu tôi đã chuyển vào trong lần cuối cùng onSaveInstanceState() được gọi.

Trả lời

39

Được sử dụng khi Hoạt động bị hệ điều hành chấm dứt mạnh mẽ (ví dụ: khi Hoạt động của bạn ở chế độ nền và một tác vụ khác cần tài nguyên). Khi điều này xảy ra, onSaveInstanceState(Bundle outstate) sẽ được gọi và tùy thuộc vào ứng dụng của bạn để thêm bất kỳ dữ liệu trạng thái nào bạn muốn lưu vào outstate.

Khi người dùng tiếp tục Hoạt động của bạn, onCreate(Bundle savedInstanceState) được gọi và savedInstanceState sẽ không bị vô hiệu nếu Hoạt động của bạn bị chấm dứt trong trường hợp được mô tả ở trên. Sau đó, ứng dụng của bạn có thể lấy dữ liệu từ savedInstanceState và tạo lại trạng thái Hoạt động của bạn về trạng thái khi người dùng nhìn thấy dữ liệu lần cuối.

Về cơ bản trong onCreate, khi savedInstanceState là không, thì điều đó có nghĩa đây là khởi chạy 'mới' của Hoạt động của bạn. Và khi nó không null (nếu ứng dụng của bạn lưu dữ liệu trong onSaveInstanceState(...), nó có nghĩa là nhà nước Hoạt động cần được tái tạo.

+1

Vì vậy - nó được sử dụng trên thay đổi định hướng và khi ứng dụng bị chấm dứt do tài nguyên thấp, nhưng không phải khi người dùng dừng ứng dụng thông qua cài đặt Android. Bất kỳ trường hợp nào khác mà nó sẽ được sử dụng? – howettl

+1

Đó là hai trường hợp duy nhất tôi biết. Loại trường hợp cạnh, nhưng tôi biết trong Android 4.x có cài đặt trong Tùy chọn nhà phát triển> Không giữ hoạt động và điều này về cơ bản sẽ buộc bất kỳ Hoạt động nào không hiển thị bị giết, khiến 'onSaveInstanceState' được gọi. – triad

19

onSaveInstanceState được sử dụng để lưu trữ dữ liệu duy nhất cho các ứng dụng đời (tức là tạm thời)

Các dữ liệu được giữ trong bộ nhớ chỉ cho đến khi ứng dụng còn sống, nói cách khác dữ liệu này bị mất khi ứng dụng đóng, vì vậy trong trường hợp của bạn khi bạn buộc đóng ứng dụng onSaveInstanceState không được sử dụng. hoạt động trong khi ứng dụng của bạn vẫn còn hoạt động, ví dụ: khi bạn thay đổi hướng màn hình, hoạt động vẫn còn nguyên như vậy onSaveInstanceState được gọi.

Tuy nhiên, nếu bạn muốn lưu trữ vĩnh viễn dữ liệu bạn sẽ phải sử dụng SharedPreferencesSQLite database.

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