Tôi có thể dựa vào tuyên bố của ứng dụng Context
không thay đổi trong suốt vòng đời của ứng dụng không? Điều gì sẽ xảy ra nếu tôi lưu trữ một số context
ở đâu đó bằng mẫu đơn và sau đó sử dụng bất cứ nơi nào tôi cần?Có thể thay đổi bối cảnh ứng dụng trong suốt vòng đời của ứng dụng không?
Trả lời
Để trả lời câu hỏi thứ hai của bạn đầu tiên: Nếu bạn cần lưu trữ một số trạng thái trong một singleton, sau đó bạn có thể sử dụng lớp Android Application
và bạn Application
trở thành singleton của bạn (nó cũng là một Context
). Sẽ không cần phải lưu trữ nó.
Để câu hỏi đầu tiên, về việc liệu Context
có thể được thay đổi trong thời gian chạy: loại liên quan đến your other question, tôi nghĩ rằng chúng ta có thể con số đó ra bằng cách nhìn vào ContextWrapper.attachBaseContext
:
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
Vì vậy, có, bạn có thể dựa vào nó; nó không thể thay đổi, và nếu bạn thử, nó sẽ ném một IllegalStateException
.
Điều gì sẽ xảy ra nếu ứng dụng sẽ bị giết vì một số lý do? – Eugene
Nếu ứng dụng bị giết, bạn không thể làm gì vì nó cũng bị giết. Bạn có cần phải duy trì dữ liệu trên ứng dụng đang bị dừng và khởi động lại không? Bạn muốn sử dụng Tùy chọn được chia sẻ cho điều đó. –
Android Application
là đơn để lưu trữ thông tin cần được theo dõi thông qua các giai đoạn vòng đời của ứng dụng. Bạn có thể kiểm tra mô tả của lớp học này trong hướng dẫn - http://developer.android.com/reference/android/app/Application.html
Trong lớp ứng dụng là một lớp cấp ứng dụng đơn cho ứng dụng android. Câu trả lời của tôi là không, bạn không thể thay đổi đối tượng ngữ cảnh ứng dụng.
Có một số tranh cãi xung quanh chủ đề này. Ngay cả một số người trong số những người từ Google. Tôi giữ cho tôi tin rằng đó là cách tiếp cận đúng đắn về cơ bản cố gắng để có được bối cảnh hoạt động nhiều lần nhất có thể. Lý do là, quan điểm của bối cảnh là cung cấp một số tài nguyên/phần của ứng dụng của bạn môi trường mà từ đó đang làm việc. Thông tin bạn cung cấp cho hệ thống chính xác hơn, hành vi ít xảy ra bất ngờ hơn (ví dụ: Bạn chỉ có quyền truy cập vào một số tài nguyên trong phạm vi ngữ cảnh hoạt động và cách vòng từ ngữ cảnh ứng dụng.
Hãy nhớ rằng hoạt động là một bối cảnh, để thông qua "điều này" sẽ làm cho công việc nếu bạn đang ở trong một hoạt động, hoặc "getActivity()" nếu mã của bạn hoạt động từ bên trong một đoạn. Nó khá hữu ích khi sử dụng lớp Ứng dụng của riêng bạn như là một Singleton, vì bạn có thể dễ dàng quản lý vòng đời của ứng dụng và sử dụng nó như là một điểm trung bình thích hợp Một lần nữa, để có được appContext nó đủ để gọi getApplicationContext hoặc thậm chí ví dụ về lớp đơn ứng dụng của bạn.
Có, bạn có thể dựa vào ngữ cảnh đó không thay đổi trong suốt vòng đời của ứng dụng!
Google nói như vậy trong tổng quan về lớp học Application.
Tôi nghĩ nó sẽ hoàn hảo cho trường hợp của bạn.
Ứng dụng là một singleton và tôi không biết cách nào để bỏ qua điều đó mà không thay đổi lõi.
Tuy nhiên, có khả năng xảy ra 2 trường hợp đối tượng Ứng dụng nếu mã của bạn bắt đầu quá trình khác. Một ví dụ sẽ bắt đầu một dịch vụ từ xa; điều này sẽ tạo ra một tiến trình khác, nó sẽ tạo ra cá thể riêng của nó đối tượng ứng dụng.
http://developer.android.com/reference/android/app/Service.html#RemoteMessengerServiceSample
Để tránh nhầm lẫn, bạn phải giao tiếp giữa các dịch vụ từ xa và phần còn lại của ứng dụng bằng một trong những tùy chọn android Parcelable hoặc Serializable:
nhắn - Handler Bundle Ý định Ý định putExtra
hoặc tạo một trong số
- 1. Cách tốt để lưu trữ dữ liệu trong suốt vòng đời của ứng dụng Android?
- 2. Nhận dạng người dùng | Thiết lập chính trong suốt vòng đời của ứng dụng
- 3. SharedPreferences bối cảnh ứng dụng và bối cảnh hoạt động
- 4. Bối cảnh ứng dụng Android có bị phá hủy không?
- 5. Hiểu vòng đời yêu cầu của Play! ứng dụng
- 6. Vòng đời và dịch vụ ứng dụng Android
- 7. Bình Flask với cần tây trong bối cảnh ứng dụng
- 8. Quyết định giữa bối cảnh hoạt động hoặc bối cảnh ứng dụng để khởi tạo SQLiteOpenHelper
- 9. ALAssetPrivate trong suốt vòng đời của việc sở hữu ALAssetsLibrary
- 10. Chỉ định bối cảnh ứng dụng tùy chỉnh
- 11. Có thể sử dụng độ trong suốt trong biểu tượng ứng dụng iPhone không?
- 12. IntelliJ ứng dụng web con đường bối cảnh
- 13. Ứng dụng trọn đời trong ASP.NET
- 14. Bối cảnh trong khuôn khổ Phản ứng JS của Facebook
- 15. FMDB: Có tốt trong cơ sở dữ liệu mở trong toàn bộ vòng đời của ứng dụng ios không?
- 16. Các thuộc tính bên ngoài của bối cảnh ứng dụng mùa xuân?
- 17. Ứng dụng Android có thể thay đổi da/chủ đề
- 18. Android: Làm thế nào để có được bối cảnh ứng dụng hiện tại trong AsyncTask?
- 19. Lỗi xác thực của Lược đồ đậu mùa xuân bên trong bối cảnh ứng dụng
- 20. Cách thay đổi Tên ứng dụng Android và ID của một ứng dụng hiện có?
- 21. Thay đổi tên ứng dụng trong Eclipse
- 22. Tôi có thể thay đổi giá của ứng dụng sau khi tải lên ứng dụng trên cửa hàng ứng dụng iTunes không?
- 23. ngữ cảnh gốc của ứng dụng grails
- 24. Có thể thay đổi Kiểu thông báo mặc định khi cài đặt ứng dụng không?
- 25. Có thể thay đổi tên gói của ứng dụng Android trên Google Play không?
- 26. Phân cấp bối cảnh mùa xuân với ngữ cảnh ứng dụng web
- 27. Cách kết nối các sự kiện bối cảnh ứng dụng mùa xuân với một bối cảnh khác
- 28. Ứng dụng Iphone Voip - Bối cảnh và giữ cho hình ảnh sống động của chúng tôi
- 29. Maven và mùa xuân = Không thể tạo bối cảnh ứng dụng: Không thể xác định vị trí xuân NamespaceHandler
- 30. Suốt đời và sử dụng nhiều chương trình AntiForgeryToken?
Có thể điều này có thể hữu ích: http://stackoverflow.com/questions/708012/android-how-to-declare- global-variables/4642069 # 4642069 –
Tại sao bạn cần lưu trữ ngữ cảnh? Bạn luôn có thể nhận được nó bằng cách gọi getApplicationContext() – Yury
@Yury: Không phải từ lớp Không hoạt động hoặc Ứng dụng. –