
ما هو السياق؟
كما يوحي الاسم ، هذا هو سياق الحالة الحالية للتطبيق أو الكائن. هذا يسمح للكائنات التي تم إنشاؤها حديثًا بفهم ما يحدث. عادة ما يتصلون به للحصول على معلومات حول جزء آخر من البرنامج.
بالإضافة إلى ذلك ، يعد Context
دليلاً للنظام ، ويمكنه توفير الموارد وقواعد بيانات الوصول والتفضيلات وما إلى ذلك. تحتوي تطبيقات Android أيضًا على Activity
. يشبه استكشاف البيئة التي يعمل فيها تطبيقك. يرث كائن Activity
كائن Context
. يسمح لك بالوصول إلى موارد ومعلومات محددة حول بيئة التطبيق.
Context
موجود في كل مكان تقريبًا في تطبيق Android وهو أهم جزء فيه ، لذلك تحتاج إلى فهم كيفية استخدامه بشكل صحيح.
يمكن أن يؤدي الاستخدام غير السليم Context
إلى حدوث تسرب للذاكرة في تطبيق Android.
هناك العديد من الأنواع المختلفة من السياقات ، لذلك دعونا نكتشف ماهية كل منها وكيف ومتى يتم استخدامها بشكل صحيح.
سياق التطبيق
هذا هو مثيل مفرد (الوحيد في التطبيق بالكامل) ، ويمكن الوصول إليه من خلال وظيفة getApplicationContext()
. يرتبط هذا السياق بدورة حياة التطبيق. يمكن استخدام سياق التطبيق حيث تحتاج إلى سياق لا ترتبط دورة حياته بالسياق الحالي ، أو عندما تحتاج إلى تمرير السياق خارج Activity
.
على سبيل المثال ، إذا كنت بحاجة إلى إنشاء كائن مفرد لتطبيقك ، وهذا الكائن يحتاج إلى بعض السياق ، فاستخدم دائمًا سياق التطبيق.
إذا قمت بتمرير سياق Activity
في هذه الحالة ، فسيؤدي ذلك إلى تسرب للذاكرة ، حيث سيحتفظ كائن مفرد بإشارة إلى Activity
ولن يتم إتلافه من قبل جامع القمامة عند الضرورة.
في حالة الحاجة إلى تهيئة مكتبة في Activity
، قم دائمًا بتمرير سياق التطبيق ، وليس سياق Activity
.
لذلك ، يجب استخدام getApplicationContext()
عندما يُعرف أنك بحاجة إلى سياق لشيء يمكن أن يعيش لفترة أطول من أي سياق آخر لديك تحت تصرفك.
سياق النشاط
يمكن الوصول إلى هذا السياق في Activity
وهو مرتبط بدورة حياته. يجب استخدام سياق Activity
عند تمرير سياق داخل Activity
أو إذا كنت بحاجة إلى سياق ترتبط دورة حياته بالسياق الحالي.
getContext () في ContentProvider
هذا السياق هو سياق التطبيق ويمكن استخدامه بشكل مماثل لسياق التطبيق. يمكن الوصول إليه من خلال طريقة getContext()
.
متى يتعذر استخدام getApplicationContext ()؟
- هذا ليس سياقًا كاملاً يدعم كل ما يمكن أن يفعله أي
Activity
. ستفشل بعض الأشياء التي تحاول القيام بها في هذا السياق ، والتي تتعلق بشكل أساسي بواجهة المستخدم الرسومية. - قد تحدث تسرب للذاكرة إذا تم
getApplicationContext()
بالسياق من getApplicationContext()
على كائن ما لم تقم getApplicationContext()
لاحقًا. إذا تم الاحتفاظ بسياق Activity
مكان ما ، فعندما Activity
تدمير Activity
بواسطة جامع القمامة ، يتم تدمير كل شيء آخر أيضًا. يبقى كائن Application
طوال مدة العملية.
قاعدة عامة
في معظم الحالات ، استخدم سياق يمكن الوصول إليه مباشرة من المكون الذي تعمل فيه حاليًا. يمكنك تخزين ارتباط به بأمان إذا لم يتجاوز دورة حياة هذا المكون. بمجرد أن تحتاج إلى حفظ الرابط إلى السياق في كائن يعيش خارج نشاطك أو مكون آخر ، حتى مؤقتًا ، استخدم الرابط إلى سياق التطبيق.