تكرار السؤال: …
الإجابة المختصرة
Activity Context مرتبط بدورة حياة الشاشة والثيمات وواجهات المستخدم، بينما Application Context يعيش طوال فترة تشغيل التطبيق وتستخدمه للعمليات العامة والـ Singletons.
الشرح
يحتوي Activity Context على معلومات الثيم (Theme) والـ Window Manager، لذلك يجب استخدامه لعرض Dialogs وبدء شاشات جديدة وتضخيم الواجهات (Inflating Views). أما Application Context فيُستخدم للعمليات المستمرة مثل تهيئة قواعد البيانات والمكتبات المركزية؛ وتمرير Activity Context لكائن يعيش طويلاً (كـ Singleton) يؤدي لتسريب الـ Activity بالكامل في الذاكرة.
مثال بالكود
// صحيح للـ Singletons ومستودعات البيانات:
class Repository(private val appContext: Context) // تمرير applicationContext
// مطلوب لإنشاء الـ Dialogs وعرض الـ UI:
val builder = AlertDialog.Builder(activity) // استخدام Activity Contextأخطاء شائعة
- تمرير Activity Context إلى كلاس Singleton أو كائن ثابت (Static) مما يمنع الـ Garbage Collector من تحرير الـ Activity.
- استخدام Application Context لإنشاء Dialog أو Toast بدون ثيم مناسب مما يسبب كراش أو أخطاء مظهرية.