2013-02-02 38 views
42

Ai đó có thể giải thích điều này với tôi xin vui lòng:Context Ý định Android Khó hiểu

Intent intent = new Intent(Context, AlarmReceiver.class); 

Tôi không bao giờ hiểu và tôi nghiêm túc nghĩ rằng tôi sẽ không bao giờ nếu ai đó không cố gắng giải thích điều này với tôi trong chiều sâu. Toàn bộ bối cảnh này rất khó hiểu với tôi. Đôi khi nó hoạt động như thế này:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 

đôi khi nó sẽ không làm việc như thế nhưng nó chỉ chấp nhận:

Intent intent = new Intent(context, AlarmReceiver.class); 

Đôi khi nó:

Intent intent = new Intent(this, AlarmReceiver.class); 

vv vv và nhiều người khác.

Tôi hiểu khái niệm cơ bản về ngữ cảnh nhưng có bao nhiêu nội dung? Và tại sao nhật thực lại ném cho tôi một lỗi một lần và một lần khác nó bị phạt? Tại sao chúng ta cần phải khai báo bối cảnh đôi khi? :

Context context; 

Tôi không thể tìm đúng ngữ cảnh cho mọi tình huống làm cách nào để biết điều gì là đúng trong mọi tình huống?

Trả lời

56

Trước hết, hãy để tôi giải thích những gì the context tốt hơn một chút, sau đó chúng ta hãy tiếp tục sử dụng và nhận nó như thế nào. Về cơ bản, bối cảnh là một tham chiếu đến việc liên kết tài nguyên của bạn với chương trình của bạn. Mỗi đối tượng được đưa ra bối cảnh riêng của nó, trong đó có các nguồn lực cần thiết để thiết lập đối tượng đó lên. Nó là cần thiết cho nhiều đối tượng được tạo ra, và để có được thông tin nhận dạng chương trình, trong số các mục đích khác. Điều này làm cho nó vô giá để thiết lập quan điểm và hoạt động mới, nhưng nó cũng có thể được sử dụng cho các mục đích khác. Xem thêm this answer để biết thêm thông tin.

Ngữ cảnh cho một mục có thể đến từ nhiều địa điểm khác nhau. Đôi khi nó được lưu trữ và phải được lấy ra, đôi khi nó được thừa hưởng. Về cơ bản, đây là lập trình hướng đối tượng.

Chỉ cần cung cấp cho bạn một vài ví dụ:

Activity kế thừa ngữ cảnh. Vì vậy, nếu bạn đang ở trong một hoạt động, bạn chỉ cần vượt qua chính nó để sử dụng ngữ cảnh. Nó cũng chứa một con trỏ đến getBaseContext(). Đôi khi bạn có thể cần phải tham khảo điều đó, nếu bạn cần toàn bộ bối cảnh ứng dụng, nhưng rất có thể bạn sẽ không mất một thời gian.

View không kế thừa ngữ cảnh. Tuy nhiên, nó có phương thức getContext(). Nếu bạn cần để có được một bối cảnh từ một cái nhìn, đây là cách để có được nó. Ngữ cảnh này sẽ không hoàn thành, nhưng sẽ chỉ có ngữ cảnh cho nội dung của Chế độ xem.

Fragments cũng không kế thừa ngữ cảnh. Chúng chứa phương thức getActivity(), nếu Phân đoạn đang hoạt động, sẽ trả về hoạt động, đó là ngữ cảnh cho Phân đoạn.

BroadcastReceivers cũng không kế thừa ngữ cảnh. Trên thực tế, chúng không chứa bối cảnh nào cả, nhưng chỉ đơn giản là nhận bối cảnh hiện tại khi một sự kiện được nhận (Chẳng hạn như onReceive(Context context, Intent intent))

+1

Còn phương pháp lớp BroadcastReceiver thì sao? Những loại bối cảnh nào nó có nguyên nhân tôi không thể tìm thấy một trong những thích hợp? – user1880779

+1

Được rồi, tôi đã thêm câu trả lời đó vào câu trả lời của tôi. – PearsonArtPhoto

+0

Cảm ơn bạn đã trả lời, được rồi tôi đang có một phương thức trong lớp BroadcastReceiver của tôi, trong phương thức đó tôi đang cố gắng: 'Intent intent = new Intent (, AlarmReceiver.class);', không thể tìm đúng ngữ cảnh – user1880779

5

Điều tôi hiểu bằng ngữ cảnh là môi trường.Trong ngữ cảnh đơn giản là môi trường xung quanh Do đó khi bạn đang sử dụng bất kỳ hình thức nào của bối cảnh, bạn phải quyết định rằng những gì nên là môi trường xung quanh của những thứ mà bạn đang sử dụng ngữ cảnh.

Ví dụ: nếu bạn muốn một số dữ liệu hoặc trường tồn tại thông qua ứng dụng, bạn nên xác định nó trong lớp ứng dụng.

Bây giờ khi bạn nhận được ngữ cảnh ứng dụng trong bất kỳ thành phần nào trong ứng dụng của bạn, trường này mà bạn đã khai báo trong lớp ứng dụng sẽ nằm trong ngữ cảnh của bạn. Bạn có thể truy cập nó.

Tương tự đối với mọi loại ngữ cảnh.

Nếu bạn đã từng sử dụng alertDialog trong thành phần dịch vụ bằng cách sử dụng ngữ cảnh "this" .Try this one and i bet bạn chắc chắn sẽ nhận ngoại lệ vì "this" đại diện cho môi trường dịch vụ khi được sử dụng trong đó. thành phần chúng ta không thể thêm cửa sổ trong đó. Nó sẽ cho bạn biết ngoại lệ mã thông báo xấu. Có nghĩa là mã thông báo được tạo cho khung nhìn xung quanh không thích hợp cho alertDialog hiển thị.

Hy vọng điều này sẽ cung cấp cho bạn ý tưởng ngắn gọn những gì bạn muốn.

4

Khả năng ngữ cảnh

Các hành động phổ biến bạn có thể thực hiện một cách an toàn với đối tượng bối cảnh nhất định tùy thuộc vào vị trí ban đầu. Dưới đây là một bảng trong những nơi phổ biến một ứng dụng sẽ nhận được một bối cảnh, và trong mỗi trường hợp những gì nó rất hữu ích cho:

enter image description here

  1. Đơn THỂ bắt đầu hoạt động từ ở đây, nhưng nó đòi hỏi một tác vụ mới được tạo. Điều này có thể phù hợp với các trường hợp sử dụng cụ thể, nhưng có thể tạo các hành vi ngăn xếp ngược không chuẩn trong ứng dụng của bạn và thường không được đề xuất hoặc được coi là thực hành tốt.
  2. Điều này là hợp pháp, nhưng lạm phát sẽ được thực hiện với chủ đề mặc định cho hệ thống bạn đang chạy, không phải những gì được xác định trong ứng dụng của bạn.
  3. Được phép nếu người nhận không có giá trị, được sử dụng để lấy giá trị hiện tại của một chương trình phát sóng dính, trên Android 4.2 trở lên.

Bài viết gốc here.

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