2010-04-20 31 views
5

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

6

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.

+0

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

+1

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

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