Tôi chuyển một boolean vào hoạt động của tôi khi tôi tạo nó thông qua Intent BundleExtra. Bây giờ nhìn vào activity lifecycle, nếu hoạt động của tôi bị dừng lại (onStop
), thì một ứng dụng khác cần bộ nhớ để quá trình ứng dụng bị giết, sau đó người dùng điều hướng đến hoạt động (onCreate
). Liệu onCreate cuối cùng có chứa boolean ban đầu của tôi mà tôi đã vượt qua? Tôi sẽ giả sử nếu tôi muốn boolean được lưu, tôi sẽ cần phải lưu nó trong OnSaveInstanceState
, đúng không?Nếu một hoạt động được dừng lại sau đó tái tạo những gì được thông qua vào getIntent()
Trả lời
Tôi sẽ sử dụng onPause() vì lý do này (từ các tài liệu)
Lưu ý rằng điều quan trọng là để lưu dữ liệu liên tục trong onPause() thay vì của onSaveInstanceState (Bundle) vì sau này không phải là một phần trong số các cuộc gọi lại vòng đời , do đó sẽ không được gọi trong mọi tình huống như được mô tả trong tài liệu của nó.
Sau đó đọc lại lần nữa trong onCreate()
ví dụ: từ cơ sở dữ liệu hoặc một số tài nguyên khác mà bạn lưu trữ nó trong
Vì vậy, tùy thuộc vào cách quan trọng là giá trị boolean là bạn sẽ sử dụng cơ chế tiết kiệm bạn muốn .. cho nhà nước liên tục:. http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState
Và đối với nhà nước UI như văn bản đơn giản , lựa chọn sử dụng onSaveInstanceState
như mô tả ở đây: Saving Android Activity state using Save Instance State
là một tóm tắt: khi quá trình giết boolean = đinếu không được lưu :)
Ma uno V. đúng, trong trường hợp của bạn, bạn phải đi với onPause()
Thực tế là onSaveInstanceState (bó bó) được thiết kế để lưu trạng thái trong ví dụ hiện tại. Vì vậy, khi ứng dụng của bạn bị giết, bó lưu quá
Bạn có thể sử dụng SharedPreferences để lưu boolean của bạn:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit();
Và lấy nó trên onCreate của bạn:
Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true);
Điều này là không chính xác. Khi quá trình lưu trữ ứng dụng của bạn sẽ bị hủy, "gói lưu trạng thái thể hiện" sẽ được quản lý bởi ActivityManager và sẽ được trả lại khi người dùng điều hướng đến ứng dụng của bạn. Android sẽ tạo một tiến trình và khởi tạo ứng dụng và sau đó sẽ tạo ra hoạt động ở trên cùng của ngăn xếp và sau đó vượt qua trong gói trạng thái thể hiện đã lưu cuối cùng. Trước đó, gói này không thể được giữ lại trên các lần khởi động lại thiết bị, nhưng Android đang ngày một tuyệt vời và bắt đầu ở cấp độ sdk 21, gói này cũng được giữ nguyên trong quá trình khởi động lại. –
Trên thực tế, khi hoạt động của bạn được tạo lại, ý định ban đầu sẽ vẫn được sử dụng. getIntent()
sẽ trả về cùng ý định giống như khi nó được tạo lần đầu tiên. Tuy nhiên, nếu bạn có dữ liệu khác mà bạn muốn giữ lại khi hoạt động được tạo lại, bạn sẽ cần phải lưu nó bằng cách sử dụng saveInstanceState()
. Bạn có thể xác minh điều này bằng cách đơn giản xoay thiết bị với một hoạt động đang chạy, vì nó sẽ bị hủy và tái tạo với cùng một ý định. Để biết thêm thông tin, hãy xem here.
- 1. Những thay đổi nào sau khi phiên bản AWS được dừng lại, sau đó khởi động lại
- 2. thực hiện tạm dừng hoạt động không được tiếp tục sau khi tạo lại phương thức
- 3. Android: Dừng Tái tạo hoạt động theo hướng thay đổi
- 4. Những mảnh vỡ còn lại sau khi Activity bị giết và tái tạo
- 5. Gửi email một PDF được tạo động thông qua PHP
- 6. Thay đổi dữ liệu gói ý định trước khi một hoạt động được tạo lại sau khi thay đổi hướng
- 7. Hộp thoại Android hiển thị lại sau khi Hoạt động được tạo lại
- 8. Tái sử dụng các hoạt động trước đó?
- 9. cách tái tạo lại/tự động tái tạo trong mysql
- 10. Dừng một IntentService từ một hoạt động
- 11. Hoạt động bị giết/onCreate được gọi sau khi chụp ảnh thông qua mục đích
- 12. iphone: Khởi động lại hoạt ảnh lặp sau khi chế độ xem bị ẩn, sau đó xuất hiện lại?
- 13. Thông báo mở hoạt động, nhấn nút quay lại, hoạt động chính được mở?
- 14. Làm thế nào để bắt đầu chuỗi nếu nút được nhấn và dừng nếu ấn lại?
- 15. ANDROID: nếu WiFi được kích hoạt và hoạt động, khởi động một ý định
- 16. Cách phát hiện những gì được kích hoạt applicationWillResignActive?
- 17. Làm thế nào để bạn dừng lại và sau đó bắt đầu/kích hoạt một sự kiện với JQuery?
- 18. Những nguyên tắc nào cần được theo sau để tạo một DLL được tạo bằng Delphi hoạt động tốt trong phiên bản Delphi khác?
- 19. Cách sử dụng lại hoạt động? Không được tạo hoạt động mỗi lần
- 20. Tại sao những từ này được coi là từ dừng?
- 21. Những cạm bẫy của kết nối được nhúng vào Derby qua mạng là gì?
- 22. Fragment onResume không được gọi sau khi Fragment được tách ra và sau đó đính kèm lại
- 23. nối lại hoạt động từ một thông báo
- 24. Nhấp vào HOẶC đó, sau đó làm điều gì đó
- 25. Nếu ... Sau đó ... Khác với nhiều câu sau Sau đó
- 26. Móc Drupal được kích hoạt sau khi nút được tạo
- 27. Cách xóa một hành động được thêm vào thông qua một lớp
- 28. Tại sao một ExecutorService được tạo thông qua newCachedThreadPool evil?
- 29. Nếu ngoại lệ được ném vào Danh sách <T> .ForEach, dừng lặp lại có lặp lại không?
- 30. "nếu, sau đó, khác" trong SQLite
hoàn hảo. Bản tóm tắt chính xác là những gì tôi đang tìm kiếm. Tôi thực sự muốn rằng boolean được đi vì vậy tôi có thể theo dõi nơi onCreate đang được gọi là từ – jsb