CONTEXT TRONG ANDROID LÀ GÌ

Tôi nhận thấy Ngữ cảnh trong Android, là một trong những điều khó giải thích nhất với bất kỳ ai. Khi tôi bắt đầu phát triển Android cách đây 2 năm, tôi không thể quấn lấy Ngữ cảnh trong một khoảng thời gian dài. Tôi đã rất bối rối về nó nhưng tôi vẫn sử dụng nó một cách thường xuyên, đơn giản vì nó là một trong những thứ cơ bản trong Android. Vẫn mỗi khi tôi cần thực hiện một số thao tác yêu cầu Bối cảnh, tôi cảm thấy lo lắng và tôi không biết làm thế nào để "lấy" đúng.

Bạn đang xem: Context trong android là gì

Bị thúc đẩy bởi sự bối rối của tôi trong giai đoạn đầu của sự nghiệp với tư cách là nhà phát triển Android, tôi quyết định bày tỏ sự hiểu biết của mình về Context và hy vọng nó sẽ giúp ích cho những người mới bước vào thế giới Android và không biết Context đại diện cho điều gì. Tất nhiên bài viết này cũng dành cho những ai muốn cố gắng hiểu rõ hơn về Context. Bây giờ, hãy bắt đâù.


*
trừu tượng như ngữ cảnh

Trong tài liệu Android chính thức, đây là cách họ xác định Ngữ cảnh.

Giao diện thông tin toàn cầu về môi trường ứng dụng. Đây là một lớp trừu tượng mà việc triển khai được cung cấp bởi hệ thống Android. Nó cho phép truy cập vào các tài nguyên và lớp dành riêng cho ứng dụng, cũng như các lệnh gọi lên cho các hoạt động ở cấp ứng dụng như khởi chạy hoạt động, ý định phát và nhận, v.v.

Lúc đầu, điều này không có nhiều ý nghĩa đối với tôi. Nhưng thời gian trôi qua, tôi bắt đầu hiểu ý nghĩa của nó.

Đầu tiên, hãy xem xét 3 hàm được sử dụng nhiều nhất để truy xuất Context:

getContext () - trả về Ngữ cảnh được liên kết với Hoạt động mà từ đó được gọi, getApplicationContext () - trả về Ngữ cảnh được liên kết với Ứng dụng chứa tất cả các hoạt động đang chạy bên trong nó, getBaseContext () —có liên quan đến ContextWrapper, được tạo xung quanh Ngữ cảnh hiện có và cho phép chúng tôi thay đổi hành vi của nó. Với getBaseContext (), chúng ta có thể tìm nạp Ngữ cảnh hiện có bên trong lớp ContextWrapper.

getContext ()

Trong getContext () , Context được gắn với một Activity và vòng đời của nó. Chúng ta có thể hình dung Context là lớp đứng đằng sau Activity và nó sẽ tồn tại miễn là Activity tồn tại. Thời điểm Hoạt động chết, Ngữ cảnh cũng vậy.

Activity"s Context có các chức năng riêng mà chúng ta có thể sử dụng cho tất cả những thứ mà Android framework hỗ trợ. Đây là danh sách các chức năng mà Bối cảnh của Activity cung cấp cho chúng ta:

Load Resource Values,Layout Inflation,Start an Activity,Show a Dialog,Start a Service,Bind to a Service,Send a Broadcast,Register BroadcastReceiver.

Trong getApplicationContext () , Ngữ cảnh của chúng ta được gắn với Ứng dụng và vòng đời của nó. Chúng ta có thể coi nó như một lớp đằng sau toàn bộ ứng dụng. Miễn là người dùng không giết ứng dụng, ứng dụng đó vẫn còn sống.

Bây giờ bạn có thể tự hỏi, sự khác biệt giữa getContext ()getApplicationContext () là gì . Sự khác biệt là Ngữ cảnh của ứng dụng không liên quan đến giao diện người dùng . Nó có nghĩa là, chúng ta không nên sử dụng nó để làm phồng bố cục, bắt đầu hoạt động hay hiển thị hộp thoại . Về phần còn lại của các chức năng từ Ngữ cảnh của hoạt động, chúng cũng có sẵn từ Ngữ cảnh của ứng dụng. Vì vậy, danh sách các chức năng cho Ngữ cảnh của Ứng dụng trông như sau:

Load Resource Values,Start a Service,Bind to a Service,Send a Broadcast,Register BroadcastReceiver.

Ngữ cảnh là một lớp (giao diện) đứng sau thành phần của nó (Hoạt động, Ứng dụng…) và vòng đời của thành phần, cung cấp quyền truy cập vào các chức năng khác nhau được hỗ trợ bởi môi trường ứng dụng và khuôn khổ Android.

Các chức năng được sử dụng nhiều nhất do Context cung cấp là tải tài nguyên (chẳng hạn như chuỗi, nội dung, chủ đề…), khởi động Hoạt động và Dịch vụ và bố cục tăng cao.

Tôi hy vọng bây giờ bạn đã học được điều gì đó mới và bạn hiểu Ngữ cảnh tốt hơn một chút so với trước khi đọc bài viết này. Tuy nhiên, có một điều quan trọng hơn mà bạn cần cân nhắc khi chọn đúng Ngữ cảnh.

Xem thêm: Hướng Dẫn Cách Dùng Thuốc Tẩy Giun Và Những Thắc Mắc Thường Gặp

Một điều cần chú ý khi quyết định chọn Ngữ cảnh nào

Trong bài viết này, rất nhiều lần người ta đã đề cập đến Context gắn liền với vòng đời của component. Tôi muốn nhấn mạnh rằng điều này rất quan trọng cần xem xét vì nếu bạn chọn sai, nó có thể dẫn đến rò rỉ bộ nhớ, có thể dẫn đến phá vỡ ứng dụng của bạn, có thể dẫn đến kết quả rất đáng thất vọng.

Cách dễ nhất để cho bạn thấy ý tôi bằng cách chọn Ngữ cảnh phù hợp là cho bạn xem một ví dụ.

Thí dụ

Chúng ta có singleton (lớp chỉ có thể có 1 thể hiện trong toàn bộ vòng đời ứng dụng) ContextSingleton, chứa tham chiếu đến Context.

public class ContextSingleton { private static ContextSingleton instance; private Context mContext; public static ContextSingleton getInstance(Context context) { if (instance == null) { instance = new ContextSingleton(context); } return instance; } private ContextSingleton(Context context) { mContext = context; }}

Tại sao tôi phải quan tâm?

Vâng, hãy tưởng tượng bạn vượt qua Bối cảnh của Hoạt động ở đây. Singleton của chúng tôi, sẽ chứa tham chiếu đến Hoạt động có Ngữ cảnh được thông qua. Bên cạnh đó, chúng tôi biết rằng singleton của chúng tôi sẽ tồn tại lâu hơn Activity. Điều đó sẽ dẫn đến Hoạt động sẽ không được thu thập rác khi bị giết, vì nó được tham chiếu bởi ContextSingleton. Điều này chính sẽ dẫn đến rò rỉ bộ nhớ.

Để giải quyết vấn đề này, chúng ta cần nhận ra rằng singleton của chúng ta có vòng đời tương tự như vòng đời của ứng dụng. Thật là tầm thường khi kết luận rằng bằng cách chuyển Bối cảnh của Ứng dụng trong singleton, chúng ta sẽ khắc phục được loại vấn đề này. Để giải quyết nó, chúng ta chỉ cần giữ tham chiếu của getApplicationContext () được gọi từ bất kỳ ngữ cảnh nào.

public static ContextSingleton getInstance(Context context) { if (instance == null) { instance = new ContextSingleton(context.getApplicationContext()); } return instance;}

Trong bài viết này, tôi đã cố gắng trình bày cách hiểu của tôi về Ngữ cảnh trong Android. Chúng tôi cũng đã đề cập đến các chức năng cung cấp Bối cảnh hoạt động và Ứng dụng, sự khác biệt của chúng và cách bạn có thể quyết định cái nào bạn nên sử dụng trong các tình huống khác nhau.

Mục tiêu của bài viết này là cố gắng giúp các nhà phát triển Android mới hiểu sơ bộ về Context trong Android là gì và tại sao chúng ta sử dụng nó. Vẫn còn nhiều điều cần tìm hiểu liên quan đến Ngữ cảnh và khả năng của nó. Đối với bất kỳ ai đang cố gắng tìm hiểu thêm về Ngữ cảnh, tôi có thể giới thiệu bài viết tuyệt vời này của Dave Smith .

Tôi thực sự hy vọng rằng tôi đã giúp bạn hiểu rõ hơn về Ngữ cảnh trong Android. Nếu có phần nào của bài viết mà bạn cảm thấy khó xử lý, hãy bình luận chúng. Tôi sẽ cố gắng hết sức để cập nhật bài viết tùy thuộc vào phản hồi.

Cảm ơn bạn đã dành thời gian đọc bài viết của tôi.

Chúc mừng!

Ngoài ra, tôi luôn sẵn sàng nhận xét về các nội dung Android, vì vậy nếu bạn muốn nói chuyện, hãy liên hệ với tôi trên twitter hoặc linkedin .