2012-08-24 20 views
5

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

2

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 :)

+0

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

1

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); 
+0

Đ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. –

3

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.

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