Sự khác biệt giữa Hoạt động và Ngữ cảnh là gì?


91

Hoạt động và Ngữ cảnh có giống nhau không hay có sự khác biệt?

Khi nào tôi nên có một phương thức chuyển một Hoạt động và khi một Ngữ cảnh?


@Egor Thnx người đàn ông, và cáu kỉnh tôi sẽ chăm sóc cho nó .. trước khi đặt câu hỏi .. u có thể giúp tôi trong hơn một câu hỏi .. thư mục gốc của tất cả các hoạt động trong android là gì
Android

hãy kiểm tra các cuộc thảo luận dưới đây để xóa các câu hỏi
Egor

Thật tệ là không có câu trả lời nào trong số này là rất đầy đủ. Đây là mục đầu tiên xuất hiện khi tìm kiếm trên google.
SMBiggs

Câu trả lời:


118

Theo như tôi hiểu: Ngữ cảnh là Đối tượng Cơ sở. Vì vậy mọi Hoạt động giống như Ứng dụng đều bắt nguồn từ Ngữ cảnh. Điều này có nghĩa là mọi Hoạt động và mọi ApplicationIS a Context;

Từ developer.android.com hoạt động

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.view.ContextThemeWrapper
               android.app.Activity

ứng dụng

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.app.Application

Bối cảnh Ứng dụng tồn tại, miễn là ứng dụng của bạn còn sống, trong khi ngữ cảnh Hoạt động chết với Hoạt động của bạn (nó không hợp lệ sau onDestroyHoạt động đó).

Vì vậy, nếu bạn cần Ngữ cảnh trên các Hoạt động (tức là trong một Singleton), bạn sẽ tốt hơn khi sử dụng Ngữ cảnh Ứng dụng.

Thông thường trên các phương pháp của Android Framework trong đó ngữ cảnh được mong đợi, không có sự khác biệt nào bạn vượt qua. Nhưng hãy luôn lưu ý đến MemoryLeaks nếu bạn đang giữ các Tham chiếu lâu dài đến một bối cảnh


2
Vâng, tôi xin lỗi, tôi đã kiểm tra liên kết, thực sự thì Context là một lớp cha của Activity. Tuy nhiên, không hoàn toàn đúng khi nói Activity là một ngữ cảnh, Activity là một đối tượng phức tạp hơn, trong khi Context chỉ là một khối chứa thông tin và cung cấp quyền truy cập vào tài nguyên.
Egor

@Rafael T Thnx đã cho câu trả lời thích hợp
Android

17
nó hoàn toàn đúng nếu tôi đề cập đến các ngôn ngữ hướng đối tượng: mọi Đối tượng trong Java đều bắt nguồn từ Object.class, vì vậy trong THỰC TẾ mọi thứ đều LÀ Đối tượng. Nói rõ hơn: Acivity là một chuyên ngành của Context. Nếu tôi có một lớp Động vật trừu tượng và hai lớp có nguồn gốc từ Động vật (Mèo, Chó), thì hai lớp này ít nhất là Động vật. Ở bất cứ đâu yêu cầu Động vật, bạn đều có thể vượt qua Mèo hoặc Chó, vì Ngữ cảnh cũng vậy! Vui lòng xác nhận Thông tin trước khi bạn phản đối tôi
Rafael T

1
"Bối cảnh Hoạt động kéo dài, miễn là ứng dụng của bạn còn sống, trong khi ngữ cảnh Hoạt động chết với Hoạt động của bạn" dường như tắt. Đầu tiên không phải là ngữ cảnh Ứng dụng ?
FirstOne

8

Như Bạn có thể thấy trên tài liệu Android :

Lớp Activity mở rộng từ "ContextThemeWrapper" và lớp này từ "ContextWrapper" và lớp đó từ "Context".

Vì vậy, có, một Hoạt động mở rộng Ngữ cảnh!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.