2012-01-13 35 views
7

Tôi biết bây giờ, rằng nếu tôi cần phải nhận được một nguồn trong một số chức năng tĩnh, tôi phải vượt qua bối cảnh hoặc recources của bối cảnh đó bằng cách nào đó - bởi tham số hoặc thông qua một biến tĩnh. Nhưng lý do tại sao là cần thiết? ID của các tài nguyên có thể truy cập trong môi trường xung quanh tĩnh, ví dụ: R.string.some_my_stuff. Nếu tôi muốn có tài nguyên hệ thống, nó cũng hiển thị ở đó thông qua Resources.getSystem().getString(android.string.some_common_stuff). Nhưng tại sao tôi không thể làm điều gì đó tương tự để có được một tài nguyên ứng dụng? Các tệp tài nguyên là phần tĩnh thông thường của các nguồn. Tài nguyên là tĩnhthuộc về để áp dụng. Các lớp ứng dụng thuộc về nó theo cùng một cách và tôi có thể truy cập các phần tĩnh của chúng theo cách tĩnh.Tại sao không thể truy cập tài nguyên theo cách tĩnh?

Tại sao tôi không thể sử dụng tài nguyên trong tất cả ứng dụng theo cùng một cách tĩnh, điều này sẽ là tự nhiên nhất, nhưng phải truy cập chúng thông qua cá thể thay thế?

Tôi sợ, tôi không hiểu điều gì đó rất quan trọng.

Xin vui lòng, đừng lặp lại rằng tôi không thể làm điều đó. Tôi biết điều đó, về danh dự của tôi. Xin vui lòng, giải thích lý do tại sao, hoặc chỉ cho tôi cách ... Chỉ có điều đó sẽ chữa khỏi tôi từ nỗi buồn của tôi :-) Cảm ơn bạn.

+1

tài nguyên của bạn thuộc về ứng dụng của bạn, đó là ngữ cảnh. những gì bạn có thể làm là có một lớp ứng dụng là một singleton và truy cập tài nguyên của bạn từ đó. Ngoài ra, làm thế nào bạn cần tài nguyên ở một nơi mà bạn không thể truy cập bất kỳ ngữ cảnh nào? – njzk2

+1

Lưu ý rằng bạn không thể nhận được các tài nguyên đó mà không được tải bởi các hoạt động/lượt xem quan tâm. – adatapost

+0

@njzk. 1. Điều đó tôi có thể đạt được không cần phải có nghĩa là tôi PHẢI đạt được nó. 2. Trong các định nghĩa var tĩnh cuối cùng hoạt động mà bạn không thể với tới ngữ cảnh, nhưng việc đọc các hằng số toàn cục từ các bài viết sẽ là điều tự nhiên để làm ngay tại đây. – Gangnus

Trả lời

3

ID tài nguyên là duy nhất cho mỗi ứng dụng, chúng không phải là duy nhất trên tất cả ứng dụng (bao gồm cả hệ thống Android). Ví dụ. Vì vậy, yon chỉ có thể truy cập một ứng dụng một cách tĩnh lặng (mọi lập trình viên phải đồng ý với một ứng dụng nào đó, đó là hệ thống Android của nó (không có sự lựa chọn nào, chỉ có một ứng dụng duy nhất) luôn được cài đặt)). Đối với tất cả các ứng dụng khác, bạn phải có khả năng cho hệ thống biết tài nguyên của ứng dụng nào bạn muốn truy cập. Bạn làm điều này bằng cách sử dụng ngữ cảnh.

+0

+1. phần thứ hai của tin nhắn của bạn có một suy nghĩ thú vị. Nhưng IMHO, nó không phải là câu trả lời. Ngữ cảnh thể hiện của hoạt động có quyền truy cập vào các tài nguyên ứng dụng. Nó là chính xác cho mọi hoạt động trong ứng dụng. Nhưng các lớp học của họ cũng thuộc về ứng dụng. Tại sao chỉ các cá thể hoạt động mới nhìn thấy tài nguyên chứ không phải các lớp hoạt động? Chúng ** không ** thuộc hệ thống Android. – Gangnus

+0

thông tin tĩnh trong lớp được tạo tại thời gian biên dịch. Nhưng bạn không thể ID ứng dụng tại thời gian biên dịch, bởi vì bạn không thể đảm bảo ID duy nhất tại thời điểm đó. Chỉ có cá thể của ứng dụng của bạn được biểu thị bằng ngữ cảnh (được tạo khi ứng dụng được khởi động) cung cấp một ID duy nhất, được tạo ra tại thời điểm này bởi hệ thống Android. Để cung cấp cho bạn quyền truy cập tĩnh, trình khởi chạy phải sửa đổi mã. – Stefan

+0

Trong bình luận ở trên của tôi thay thế "thời gian biên dịch" theo "thời gian tải lớp". Điều này có nghĩa là trình nạp lớp sẽ có thể tiêm thông tin. Tuy nhiên, nó không. – Stefan

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