Context là cầu nối tới tài nguyên và dịch vụ hệ thống: truy cập resources, khởi động Activity/Service, lấy getSystemService(), mở database... Về vòng đời có hai loại chính:
- Activity context: gắn với vòng đời một Activity, biết về theme/UI. Dùng khi cần theme đúng: inflate layout, tạo Dialog, hiển thị View.
- Application context: sống suốt vòng đời tiến trình, độc lập với UI. Dùng cho việc "sống lâu hơn màn hình": singleton, thư viện,
WorkManager.
Memory leak xảy ra khi một object sống lâu (singleton, static, thread) giữ tham chiếu tới Activity context. GC không thu hồi được Activity đã finish() vì vẫn còn ai đó tham chiếu, kéo theo cả cây View. Quy tắc: cái gì sống lâu hơn màn hình thì truyền applicationContext; chỉ dùng Activity context cho việc liên quan UI của chính màn hình đó.