السياق في تطبيق Android

السياق في تطبيق Android


ما هو السياق؟


كما يوحي الاسم ، هذا هو سياق الحالة الحالية للتطبيق أو الكائن. هذا يسمح للكائنات التي تم إنشاؤها حديثًا بفهم ما يحدث. عادة ما يتصلون به للحصول على معلومات حول جزء آخر من البرنامج.


بالإضافة إلى ذلك ، يعد 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 طوال مدة العملية.

قاعدة عامة


في معظم الحالات ، استخدم سياق يمكن الوصول إليه مباشرة من المكون الذي تعمل فيه حاليًا. يمكنك تخزين ارتباط به بأمان إذا لم يتجاوز دورة حياة هذا المكون. بمجرد أن تحتاج إلى حفظ الرابط إلى السياق في كائن يعيش خارج نشاطك أو مكون آخر ، حتى مؤقتًا ، استخدم الرابط إلى سياق التطبيق.

Source: https://habr.com/ru/post/ar421115/


All Articles