Bất kỳ ai cũng có thể giúp tôi biết về Bundle savedInstanceState
trong onCreate(Bundle savedInstanceState)
Tôi là người mới sử dụng trong Android. Tôi cố gắng hiểu nó từ developer.android.com. Nhưng tôi không thể hiểu được. Bất cứ ai có thể đơn giản hóa nó?Có gì trênCreate (Bundle savedInstanceState)
Trả lời
Nếu bạn lưu trạng thái của ứng dụng trong một gói (thường không liên tục, dữ liệu động trong onSaveInstanceState
), nó có thể được chuyển về onCreate
nếu hoạt động cần được tạo lại (ví dụ: thay đổi hướng) để bạn không bị mất thông tin này trước. Nếu không có dữ liệu nào được cung cấp, savedInstanceState
là rỗng.
... bạn nên sử dụng phương thức onPause() để ghi bất kỳ dữ liệu liên tục nào (chẳng hạn như chỉnh sửa của người dùng) vào bộ nhớ. Ngoài ra, phương thức onSaveInstanceState (Bundle) được gọi trước khi đặt hoạt động ở trạng thái nền là , cho phép bạn tiết kiệm bất kỳ trạng thái thể hiện động nào trong hoạt động của mình vào Gói đã cho, sau này được nhận được trong onCreate (Gói) nếu hoạt động cần được tạo lại. Xem phần Vòng đời quy trình để biết thêm thông tin về cách vòng đời của quy trình được gắn với hoạt động mà nó đang lưu trữ. Lưu ý rằng điều quan trọng là lưu dữ liệu liên tục trong onPause() thay vì onSaveInstanceState (Bundle) vì sau này không phải là một phần của cuộc gọi lại vòng đời , vì vậy 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ó.
các hoạt động khác có cùng một Gói không ?, nếu tôi bắt đầu một hoạt động khác, nó có vượt qua Gói từ hoạt động đầu tiên không? –
onCreate(Bundle savedInstanceState)
bạn sẽ nhận được Bundle
null khi hoạt động get bắt đầu lần đầu tiên và nó sẽ được sử dụng khi định hướng hoạt động có được thay đổi .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android cung cấp một cách thanh lịch của đạt được điều này. Để đạt được điều này, chúng ta phải ghi đè lên một phương thức có tên là onSaveInstanceState()
. Nền tảng Android cho phép người dùng lưu bất kỳ trạng thái cá thể nào. Trạng thái cá thể có thể được lưu trong Gói. Gói được chuyển làm đối số cho phương thức onSaveInstanceState.
chúng tôi có thể tải trạng thái phiên bản đã lưu từ Gói được chuyển làm đối số cho phương thức onCreate
. Chúng tôi cũng có thể tải trạng thái mẫu đã lưu theo phương thức onRestoreInstanceState
. Nhưng tôi sẽ để điều đó cho độc giả tìm ra.
'savedInstanceState' sẽ không phải' '' 'nếu' onSavedInstanceState() 'trước đây được gọi. thay đổi định hướng chỉ là một ví dụ trong đó điều này có thể xảy ra. –
@ AlexLockwood, tôi đang cố gắng nghĩ về tất cả các tình huống mà điều này có thể xảy ra. Có tài liệu nào không? Một ví dụ tôi có thể nghĩ là nếu người dùng chuyển các ứng dụng và quay lại, nhưng hoạt động đã bị phá hủy để khôi phục tài nguyên. Trong trường hợp này, android sẽ tạo lại hoạt động với một gói nếu onSaveInsanceState() bị ghi đè, phải không? – batbrat
@batbrat Có ... nhận xét tôi đã đưa ra (gần hai năm trước) không hoàn toàn chính xác. Tôi đoán cách tốt nhất để đặt nó là đối số 'Bundle' vào' onCreate (Bundle) 'sẽ không' '' '' 'nếu và chỉ khi' Activity' có phương thức 'onSaveInstanceState' trước đó được gọi. Điều này xảy ra trong khi thay đổi hướng ... và cũng xảy ra khi hoạt động trở lại sau khi bị hệ điều hành giết và khi bạn kích hoạt bất kỳ thay đổi cấu hình nào khác trên thiết bị của mình. –
onCreate(Bundle)
được gọi khi hoạt động là người đầu tiên khởi động. Bạn có thể sử dụng nó để thực hiện khởi tạo một lần như tạo giao diện người dùng. onCreate()
lấy một tham số hoặc là null hoặc một số thông tin trạng thái đã được lưu trước đó bởi onSaveInstanceState
.
onCreate (Bundle savedInstanceState) được gọi và lưuInstanceState sẽ không null nếu Activity của bạn và nó đã bị chấm dứt trong một kịch bản (xem trực quan) được mô tả ở trên. Sau đó, ứng dụng của bạn có thể lấy (bắt) dữ liệu từ savedInstanceState và tạo lại Hoạt động
Khi Dhruv Gairola trả lời, bạn có thể lưu trạng thái của ứng dụng bằng cách sử dụng Bundle savedInstanceState. Tôi đang cố gắng đưa ra một ví dụ rất đơn giản mà những người học mới như tôi có thể hiểu một cách dễ dàng.
Giả sử, bạn có một đoạn đơn giản với TextView và nút.Mỗi lần bạn nhấp vào nút, văn bản sẽ thay đổi. Bây giờ, thay đổi hướng của thiết bị/giả lập và thông báo rằng bạn đã mất dữ liệu (nghĩa là dữ liệu đã thay đổi sau khi bạn nhấp vào) và đoạn bắt đầu lại như lần đầu tiên. Bằng cách sử dụng Bundle savedInstanceState, chúng tôi có thể loại bỏ điều này. Nếu bạn có một cái nhìn vào cyle cuộc sống của mảnh vỡ. Fragment Lifecylce bạn sẽ nhận được rằng một phương thức "onSaveInstanceState" được gọi khi mảnh vỡ sắp bị hủy.
Vì vậy, chúng ta có thể tiết kiệm nhà nước có nghĩa là giá trị văn bản thay đổi vào đó bó như thế này
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
Sau khi bạn thực hiện các định hướng phương pháp "onCreate" sẽ được gọi đúng không? vì vậy chúng tôi chỉ có thể thực hiện điều này
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
Bây giờ, bạn sẽ không mất giá trị sau khi định hướng. Giá trị được sửa đổi luôn được hiển thị.
Lưu ý rằng điều này cũng đúng với Hoạt động. Bạn có thể giải thích thêm về sự khác biệt của (Bundle of Activity) và Bundle of Fragment không? – laalaguer
Bạn có thể hiểu rõ hơn từ vòng đời của hoạt động và đoạn mà một hoạt động có thể hiển thị nhiều đoạn tại một thời điểm. Do đó, sự khác biệt cơ bản là bạn có thể muốn lưu một số giá trị cho tất cả các phân đoạn của hoạt động. sẽ sử dụng bó hoạt động nếu không u nên sử dụng bó mảnh nếu nó là cho đoạn cụ thể. – Asad
onCreate (Bundle savedInstanceState) Chức năng trong Android:
1) Khi một Hoạt động cuộc gọi đầu tiên hoặc đưa ra sau đó onCreate (Bundle savedInstanceState) phương pháp có trách nhiệm để tạo ra hoạt động này.
2) Khi định hướng bao giờ (tức là từ ngang sang dọc hoặc dọc sang ngang) của hoạt động bị thay đổi hoặc khi Hoạt động bị chấm dứt mạnh mẽ bởi bất kỳ Hệ điều hành nào thì đối tượng LưuInstanceState tức là lớp Bundle sẽ lưu trạng thái của Hoạt động.
3) Sau khi định hướng thay đổi sau đó onCreate (Bundle savedInstanceState) sẽ gọi và tạo lại hoạt động và tải tất cả dữ liệu từ savedInstanceState.
4) Về cơ bản, lớp Bundle được sử dụng để lưu trữ dữ liệu hoạt động bất cứ khi nào xảy ra tình trạng trên xảy ra trong ứng dụng.
5) onCreate() không bắt buộc đối với ứng dụng. Nhưng lý do nó được sử dụng trong ứng dụng là bởi vì phương pháp đó là nơi tốt nhất để đặt mã khởi tạo.
6) Bạn cũng có thể đặt mã khởi tạo trong onStart() hoặc onResume() và khi ứng dụng của bạn tải trước, nó sẽ hoạt động giống như trong onCreate().
- 1. 'Bundle savedInstanceState' có còn hoạt động sau khi Ứng dụng bị giết không?
- 2. savedInstanceState luôn là null
- 3. savedInstanceState khi khôi phục đoạn từ ngăn xếp lại
- 4. Bundle Tên và Bundle Display Name
- 5. Fragments onCreateView() bundle. Nó đến từ đâu?
- 6. Khi nào gói savedInstanceState thực sự được sử dụng?
- 7. Resource Bundle Spring
- 8. bundle: lệnh không tìm thấy
- 9. Quan hệ Intent and Bundle
- 10. onSaveInstanceState không tiết kiệm giá trị của tôi (onCreate Bundle đầu vào luôn là null)
- 11. OSGi Bundle vs phụ thuộc jar
- 12. Bundler: `bundle package` với: git source
- 13. Lấy args Bundle trong callback onLoadFinished CursorLoader
- 14. Embedded OSGi hoặc Bundle ứng dụng
- 15. heroku: bash: bundle: lệnh không tìm thấy
- 16. Sonata quản Bundle Loại Collection Customization
- 17. Gọi super.onSaveInstanceState (bundle) trước hoặc cuối?
- 18. Tiết kiệm toàn bộ Bundle để SharedPreferences
- 19. Gửi Bundle với Fragment giao dịch
- 20. Symfony 2.1 Sonata quản Bundle OneToMany
- 21. Điều gì sẽ nhanh hơn? Một intent.putExtras (Bundle with Strings) hoặc nhiều intent.putExtra (String)?
- 22. Bundle command not found Windows x64
- 23. Phương thức lớp Ứng dụng Android trênCreate được gọi nhiều lần
- 24. Null pointer ngoại lệ khi sử dụng Bundle để truyền dữ liệu
- 25. ASP.NET MVC Bundle với đường dẫn tuyệt đối
- 26. Không thể chạy Jenkins Build - bundle: "command not found"
- 27. Cài đặt các phụ thuộc OSGi với maven-bundle-plugin
- 28. Bundle: Cài đặt đá quý từ kho github tin
- 29. In nội dung của một Bundle để Logcat?
- 30. Tạo 32 bit JavaFX Native Bundle trong máy 64 bit
Đây là video hay: https://www.youtube.com/watch?v=kkYIMZw9gzQ –