تعني كلمة Context في اللغة حالة أو سلوك أو طريقة سير عملية ما، فلو قمنا بتطبيق ذلك المعنى على أجزاء التطبيق سوف نقوم بتعريفه كالتالي:
هو سلوك الجزء الذي يتم تشغيله حاليا من التطبيق سواء كان Object أو غير ذلك وهو عبارة عن تركيبة أو كيان يمثل بيئة العمل لأنواع البيانات المختلفة. تقوم ال Context بمساعدة الـ Activity التي تعمل حاليا على التفاعل مع الجانب الآخر من نظام الأندرويد مثل الملفات الداخلية ( Local files )، قواعد البيانات، الجزء المتعلق بجلب الكلاسات الخاصة بنظام الأندرويد ( الكلاسات الجاهزة )، الخدمات ( Services ) وأشياء أخرى كثيرة.
معنى الـ Context ببساطة هو التعامل مع النظام لتسيير العمليات المختلفة داخل التطبيق.
من المؤكد أنك مطور لتطبيقات أندرويد بما أنك كلفت نفسك بقراءة هذه السطور ومن المؤكد أيضا أنك مررت بمصطلح الـ Context أثناء عملك على تطبيقاتك وما أريدك أن تدركه أن الـ Context في الأندرويد مهم للغاية كأهمية فهمك لطريقة التعامل معه لذلك سأوضح لك الطريقة الصحيحة لاستخدامه لأنه وببساطة استخدامك الخاطئ لهذا الشيئ قد يؤدي إلى استنفاذ الذاكرة في التطبيق ( Memory leaks )
هناك أشكال متعددة للـ Context في الأندرويد سوف نتعرف عليها، طريقة استخدامها، ومتى نستخدم احداها
Application Context
هذا الـ Context ينتمي لدورة حياة التطبيق ككل ( Lifecycle of an application ) يمكن استخدام الـ ( Application context ) إذا كنت تريد context دورة حياته منفصلة عن الـ Context الخاص بالـ Activity التي تعمل حاليا أوعندما تريد تمرير ال Context لنطاق أبعد من الـ Activity التي تعمل حاليا ويتم استدعاءه عن طريق
getApplicationContext()
مثال للإستخدام : إذا كنت تريد إنشاء Object يعمل بمفرده وليس خاصا بـ Activity معينة وهذا الـ Object يحتاج إلى Context، قم دائما بتمرير ال Application Context
مثال للتوضيح: إذا أردت إنشاء كلاس جديد لـ View معين تريد أن تنشأه وتريد استدعاء Object من هذا الكلاس في أكثر من Activity في هذه الحالة سوف تمرر له Application Context.
أما إذا قمت بتمرير Activity context سوف يؤدي إلى استنفاذ الذاكرة ( Memory leak ) لأنه في هذه الحالة سوف تكون مرجعيته للـ Activity ولن يتم تجميع الـ Activity عند انتهاء عملها في الـ Garbage collection. أيضا إذا أردت استدعاء مكتبة معينة داخل ال Activity قم باستخدام Application context
Activity Context
هذه الـ Context تعمل داخل الـ Activity وتابعة للـ ( Lifecycle of an activity ) ويتم استخدامها في حال إذا أرت تمرير الـ Context في نطاق الـ Activity فقط أو في حال إذا أردت أن تكون ال ( Lifecycle of context ) تابعة لـ ( Lifecycle of current context )
مثال للإستخدام: إذا أردت إنشاء object وأن تكون الـ Lifecycle الخاصة به تابعة للـ Activity التي يعمل بداخلها وغير مرتبط ب Activities أخرى
getContext() in Content Provider
هذا الـ Context يعتبر شكل من أشكال الـ Application Context ويمكن أن يستخدم نفس استخدامه ويستخدم غالبا مع الـ Content Provider ويتم الوصول إليه عن طريق
getContext()
متى لا نستخدم getApplicationContext؟
- الـ ( Application Context ) ليست كما يفهمها البعض أنها Context كاملة تدعم كل ما تقوم به الـ Activity.
بعض الأشياء التي تحاول استخدام هذه الـ Context معها لن تصلح وخصوصا تلك المتعلقة بالـ GUI.
قاعدة ثابتة قم بتطبيقها لاستخدام ال Context
في معظم الحالات استخدم الـ Context المتاحة لك في العنصر الذي تعمل عليه view, object...
معرفة الـمرجع Reference أو النطاق الذي يعمل بداخله العنصر إذا كان على مستوى الـ Activity فقط قم باستخدام ال Context أما إذا كان على مستوى Application قم باستخدام Application Context حتى لا يتعدى الـ Lifecycle لهذا العنصر الـ Lifecycle الذي تريد استخدامه فيه
في حال إذا كنت تريد استخدام Object معين بعد انتهاء الـ Lifecycle of activity قم باستخدام Application Context
مصادر تم الإطلاع عليها قبل كتابة المقال: