2013-02-18 14 views
7

Tôi có một sự nhầm lẫn về những gì nên đi vào , onStoponSaveInstanceState. Ví dụ, các tài liệu Android nói rằng cho -android - dữ liệu được lưu trữ trong onPause, onStop hoặc onSaveInstanceState

Cam kết thay đổi chưa được lưu, nhưng chỉ khi người dùng mong đợi những thay đổi đó phải được lưu vĩnh viễn khi họ rời khỏi (như dự thảo email).

Đối onStop -

bạn nên sử dụng onStop() để thực hiện, hơn CPU hoạt động đóng cửa chiều sâu lớn hơn, chẳng hạn như viết thông tin vào một cơ sở dữ liệu.

Đối onSaveInstanceState

hoạt động của bạn có thể có những thông tin trạng thái khác mà bạn muốn khôi phục, chẳng hạn như biến thành viên đó theo dõi sự tiến bộ của người sử dụng trong hoạt động này.

Có đúng là ba điều này về cơ bản trỏ đến lưu trữ thông tin như biểu mẫu hoặc email? Sau đó, phương pháp nào nên được lưu?

Trả lời

6

Mọi thứ bạn muốn liên tục phải được lưu trữ trong onPause() vì một số phiên bản Android cho rằng ứng dụng của bạn có thể bị giết sau khi onPause() được trả lại.

Sự khác biệt rõ ràng không rõ ràng đang được thực hiện vì onPause() xảy ra tương đối thường xuyên và cũng trong nhiều trường hợp bạn có thể không lưu trạng thái cho số onResume() của cùng một Hoạt động. Do đó, mọi người đều muốn bạn suy nghĩ kỹ trước khi bạn thực hiện các hoạt động tốn kém trong onPause(). Câu hỏi của bạn liên quan đến việc lưu trữ dữ liệu biểu mẫu, tốt, bạn có thể thực hiện quyền đó ngay khi trường đầu vào mất tiêu điểm, nếu thực sự hoàn toàn dự định người dùng sẽ nhìn thấy cùng một dữ liệu biểu mẫu ngay cả sau khi dừng ứng dụng và bắt đầu lại.

+0

'onStop()' đảm bảo được gọi kể từ Honeycomb (3.0), chiếm 96.8% thiết bị Android tính đến tháng 1 năm 2016. Vì vậy, tôi thích sử dụng 'onStop()' trên 'onPause()' để lưu dữ liệu hiện nay. –

+0

@VickyChijwani Từ quan điểm kỹ thuật phần mềm, _preferring_ 'onStop()' trên 'onPause()' không được chấp nhận, trừ khi bạn yêu cầu Android 3.0 rõ ràng trong siêu dữ liệu của ứng dụng (mà bạn không đề cập đến). –

+0

Phải, tôi thực hiện các ứng dụng của mình cho Android 3.0 trở lên, nên đã đề cập đến điều đó.Lý do khác (có thể gây tranh cãi) tôi thích 'onStop()' là vì dòng này trong [onPause() 'docs] (http://developer.android.com/reference/android/app/Activity.html#onPause % 28% 29): "Khi hoạt động B được khởi chạy trước hoạt động A, ... B sẽ không được tạo cho đến khi' onPause() 'của A trả về, vì vậy hãy chắc chắn không làm gì ở đây." Tất nhiên, các tài liệu vòng đời như một toàn thể vẫn còn khá khó hiểu vì vậy đây không phải là kết luận. –

2

Đối với bất kỳ ai đến đây vào hoặc sau năm 2016, lưu ý rằng câu trả lời của @Class Stacker khá lạc hậu vào thời điểm này. Cụ thể, onStop() được đảm bảo để được gọi kể từ Android 3.0 (Honeycomb), chiếm 96.8% of Android devices như tháng Giêng năm 2016.

Xem tài liệu vòng đời ở đây: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle (Ctrl + F cho "không trong tình trạng thể đánh")

CẬP NHẬT: đúng như đã nêu trong các nhận xét, điều này tất nhiên có nghĩa là ứng dụng của bạn phải được giới hạn độc quyền cho Android 3.0 trở lên.

+0

Chỉ để làm cho điều này rõ ràng một lần nữa (cũng đã nêu ở trên), tỷ lệ phần trăm chính nó không phải là một điểm đủ. Một ứng dụng không giải quyết sự kiên trì trong 'onPause()' phải được giới hạn nghiêm ngặt đối với Android 3 trở lên. –