context چیست؟
سلام علیکم
(جست و جو کردم منتها چیزی دراین باره پیدا نکردم)
در اموزش ها استاد در اموزش کلاس اکتیویتی
قطعه کدی رو آومزش میدن که کدهاش این هاست
public static Context context;
context = getApplicationContext();
این کدها دقیقا چه هستند؟ منظورم این هست ک context چی هست؟ و اون متد کارش چه هست؟
استاد میفرمایند ک
این کار باعث میشود تا context فعلی اپلیکیشن در متغیری که تعریف کردیم ذخیره شود
این رو جمله رو متوجه میشم اما این کانتکست رو متوجه نمیشم! این چه هست و چه کاری رو انجام میده
میدونم ک یک کلاسی هست اما کارش در اینجا چیه کانتکست اپلیکیشن چی هست؟
امید وارم منظورم رو متوجه بشید :|
امیدوارم کمکتون کنه واسه درک بهتر ولی هرچی جلوتر برین تو کدنویسی بیشتر متوجه خواهید شد
context مثل یه مفهوم انتزاعی و در اول کمی گیج کننده میمونه پس برنامه نویس ها باید همون اصطلاح context رو بگن تا اینکه بیان اون رو توضیح و تفسیر بدن و من هم کمی توضیح مختصر که بلدم رو میگم
همان طور که از اسمش پیداست context (متن ، مفاد، محتوا ، زمینه=> ترجمه گوگل) شما میتونید (بهتر همون اصطلاح context رو بگم) context فعلی یا وضعیت فعلی app یا object رو بگیرین و به object های که تازه ایجاد شدن بفهمونید که در این app یا activity یا... چه خبر بوده وبه طور معمول میتونید اون رو صدا (call) بزنید و اطلاعاتی بگیرین با توجه به قسمت های دیگر برنامتون مثل (activity, package,application)
زمانی که در activity هستین شما میتونید context فراخوانی بکنید با getApplicationContext()
, getContext()
, getBaseContext()
, this
استفاده های معمول context:
زمان تعریف یک object مثل views, adapters, listeners:
TextView tv =newTextView(getContext());
ListAdapter adapter =newSimpleCursorAdapter(getApplicationContext(),
دسترسی به منابع اشتراکی و سرویس ها مثل LAYOUT_INFLATER_SERVICE, SharedPreferences:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*,*mode*);
دسترسی به Component های Implicit (ضمنی) مثل content providers, broadcasts, intent:
getApplicationContext().getContentResolver().query(uri,...);
در تایید گفته دوستمون Crirss.. شما نباید خیلی توی جزئیات ریز بشید و کلنجار برید.باید بتونید بهترین استفاده رو ازش بگیرید.
اصولا تعریف کردن این مفاهیم خیلی سخت هست. اما برای اینکه یه دیدی داشته باشید از context سعی ام میکنم یه تعریفی نزدیک بگم.
context معنی لغویش میشه " زمینه و مفاد و..." در سمت اندروید هم نزدیک معنی لغویش بکار میره.
در واقع کانتکس یک زمینه ای ایجاد میکنه برای تعامل با بقیه قسمتهای دیگه ای از سیستم اندروید. به طور نادقیق میشه گفت context یک فضای ابری گونه ای بوجود میاره ،که داخل این فضا برخی رویکرد ها و منابع و متدها تعریف شده است ،و بقیه کلاسها برای استفاده از این منابع و متدها باید این فضا رو به ارث ببرند.
حالا بزارید یکم دقیقتر صحبت کنیم.
وقتی کلاس شما ارث بری میکنه از activity ، اگر داخل مستندات اندروید دنبال کنید میبینید خوده کلاس اکتیوتی ارث بری کرده از CotextTheme و این کلاس هم از Context ارث بری میکنه.
پس در واقع شما وقتی از اکتیویتی ارث بری میکنید چون پدر جد اکتیوتی context است. پس وارد اون فضای ابری گونه شدید و میتونید از متدهایی که فقط در این فضا تعریف شده استفاده کنید.
مثلا یه متدی مثال بزنم . :
برای ساخت دیتابیس یا باز کردن دیتابیس از متد زیر استفاده میکنید در اکتیویتی.
OpenOronCreateDatabase()....
این متد فقط در فضا ابری گونه context قابل دسترسی هست. و همون طور که در بالا گفتیم چون پدر جد اکتیویتی context است پس اجازه دسترسی از اون دارید.
اما حالا فکر کنید دیتابیس رو میخواید داخل یک کلاس معمولی باز کنید. وقتی کد زیر رو مینویسید
OpenOronCreateDatabase()....
از شما خطا میگیره.میگه همچین متدی شناسایی نشد و شما اجازه دسترسی به این متد رو ندارید .دلیلش چیه؟
چون اون فضای ابری گونه رو این کلاس نداره.
پس بخاطر همین هست ما توی کلاس به جز اکتیویتی برای باز کردن دیتابیس .به یک کانتس احتیاج داریم و بعد از گرفتن یک شی از کانتکس .متد بالا رو به صورت زیر مینویسیم
my_context.OpenOronCreateDatabase();
پس با توضیحات بالا به طور واضح سوالتون جوابش پیدا شد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .