Tôi có một lớp Tùy chọn tĩnh giữ một số tùy chọn ứng dụng và các nội dung tương tự. Có ok để lưu trữ tham chiếu đến ApplicationContext không? Tôi cần tham chiếu đó vì vậy tôi có thể nhận được thư mục bộ nhớ cache và các công cụ như thế trong các lớp học mà không kế thừa hoạt động.Android - lưu trữ các tham chiếu đến ApplicationContext
Trả lời
Bạn có quyền sử dụng số ApplicationContext
ở đó vì nếu bạn không it can cause significant memory leaks.
Tuy nhiên, sự cố bạn gặp phải là biến số static
có thể không giữ lại giá trị của nó. Do cách mà Android xử lý các ứng dụng, có thể ứng dụng của bạn có thể bị giết và sau đó khởi động lại - thường do người dùng chuyển sang các ứng dụng khác - theo cách biến số static
của bạn sẽ trở thành null và mã của bạn đã đặt chiến thắng ' t được chạy. Have a look at this question for a more detailed answer.
Có thể khắc phục sự cố này nhưng kiểm tra tất cả các khả năng có thể khiến biến của bạn kết thúc null
sẽ mất thời gian và dễ xảy ra lỗi. Vì vậy, trong các lớp ưu tiên tĩnh của tôi, tôi đã thực hiện bất kỳ phương thức nào yêu cầu một số Context
lấy nó làm đối số. Ví dụ:
static int getSomeIntegerPreference(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);
}
Thật xấu xí nhưng nó hoạt động.
- 1. Lưu trữ tham chiếu đến tham chiếu bằng Python?
- 2. Lưu trữ các đối tượng trong ApplicationContext
- 3. STL: Lưu trữ các tham chiếu hoặc giá trị?
- 4. html & javascript: Cách lưu trữ dữ liệu tham chiếu đến các phần tử html
- 5. Các thủ tục lưu trữ Mysql Kiểu cột Tham chiếu
- 6. Thêm lọ tham chiếu đến android build.xml
- 7. Nơi lưu trữ các tệp âm thanh trong dự án và giải pháp nào để chọn lưu trữ các tham chiếu đến chúng?
- 8. Tham chiếu đến các biến trong C#?
- 9. Dữ liệu lưu trữ blob tham chiếu trong SQL azure
- 10. Tôi nên lưu trữ tham chiếu đến vùng chứa DI ở đâu?
- 11. Nơi lưu trữ các khóa tùy chọn Android?
- 12. Vectơ tham chiếu đến các đối tượng
- 13. Chuyển các tham chiếu đến một hàm dựng C++ và lưu chúng vào các loại tham chiếu hoặc không tham chiếu
- 14. Làm thế nào để xác định tất cả các thủ tục lưu trữ tham chiếu đến một bảng cụ thể
- 15. Android: Xem tham chiếu đến một mục menu
- 16. Tham chiếu đến System.data.entity.design.dll không hoạt động
- 17. Tham chiếu đến con trỏ
- 18. Lưu một tham chiếu vào biến khác
- 19. Tại sao tôi không thể lưu trữ các tham chiếu trong bản đồ STL trong C++?
- 20. Lưu trữ các Dll được tham chiếu trong thư mục giải pháp studio hình ảnh
- 21. Cách tốt nhất để lưu trữ các hằng số được tham chiếu trong DB?
- 22. Tham chiếu đến phụ huynh IFRAME
- 23. Tại sao các tham chiếu không phải const tham chiếu đến bitfield bị cấm?
- 24. Làm cách nào để lưu trữ tham chiếu đến thuộc tính đối tượng trong đối tượng khác?
- 25. Đối tượng xóa tham chiếu đến tự
- 26. Tham chiếu đến các Mẫu Thiết kế trong ANSI C?
- 27. pydev: tìm tất cả các tham chiếu đến hàm
- 28. VisualVM - Tìm tất cả các tham chiếu đến một lớp
- 29. Tham chiếu đến các chuỗi ký tự trong Go
- 30. trở về tham chiếu đến các biến cục bộ
Vâng, tôi đặt Preferences.applicationContext thành getApplicationContent() khi bắt đầu hoạt động đầu tiên. Vì vậy, tôi nghĩ rằng nó cần phải có, trừ khi ứng dụng chết (VM chết, quá trình được kẻ giết người, vv ..). Và nếu nó chết, vào lần khởi động tiếp theo nó sẽ khởi tạo lại Preferences.applicationContext vì vậy tôi nghĩ rằng nó sẽ hoạt động tốt. Tôi cần một cái gì đó như thế, beacuse tôi cần truy cập vào ngữ cảnh trong một số lớp học mà không thấy getApplicationContext(). Ví dụ như lớp Category của tôi cần tải các biểu tượng cho mỗi thể loại để tôi đặt icon_path thành cái này. filepath = Preferences.applicationContext.getCacheDir(). ToString – nixa
Bạn sẽ cần khởi tạo 'Preferences.applicationContext' trong * mọi * Hoạt động sử dụng lớp' Preferences' của bạn. Quá trình của bạn có thể bị giết khi bạn đang chạy Hoạt động khác với Hoạt động đầu tiên và Android có thể đưa người dùng trở lại điểm đó trong ứng dụng của bạn, bỏ qua Hoạt động đầu tiên. –