android

هر اکتیویتی یک کامپوننت از برنامه است که صفحه نمایش را در اختیار میگیرد تا کاربران بتوانند با برنامه ارتباط (interact) برقرار کنند، مانند شماره گرفتن برای تماس، عکس گرفتن، ارسال ایمیل و یا دیدن نقشه. به هر اکتیویتی برای نمایش واسط کاربری (user interface) یک پنجره (در نمایشگر) اختصاص داده خواهد شد. پنجره عموماً کل صفحه نمایش را در بر میگیرد، اما ممکن است کوچکتر از آن هم باشد و بر روی سایر پنجره ها شناور (float) باشد.

 

هر اپلیکیشن یا برنامه معمولاً از چندین اکتیویتی تشکیل میشود که با هم در ارتباط هستند. بطور معمول، یک اکتیویتی در هر برنامه اکتیویتی اصلی است (با نام main اکتیویتی شناخته میشود) و زمانیکه کاربر برنامه را برای بار اول اجرا کرد به او نشان داده میشود. هر اکتیویتی برای انجام وظیفه محول شده به آن میتواند اکتیویتی های دیگر را فراخوانی کند تا کارهای دیگری انجام دهد. هر بار که یک اکتیویتی جدیدی شروع بکار میکند (start)، اکتیویتی قبلی متوقف میشود (stop). اما سیستم اکتیویتی قبلی را در استک (stack) نگه میدارد. بنابراین، وقتی اکتیویتی جدیدی اجرا میشود، اکتیویتی قبلی به داخل استک حل (push) داده میشود و همچنین اکتیویتی های قبلی که در داخل استک قرار داشتند نیز هرکدام یک سطح به عقب تر حل داده خواهند شد. مکانیزم استک بصورت “آخر وارد شده، اول خارج شود” (last in, first out) است. بنابراین، زمانیکه کار کاربر با اکتیویتی فعلی تمام شود و بر روی دکمه “Back” کلیک کند، اکتیویتی قبلی از داخل استک بیرون کشیده میشود (pop) و ادامه آن اجرا خواهد شد. (برای اطلاعات بیشتر راجع به طرزکار استک به مستند Tasks and Back Stack رجوع کنید)

زمانیکه با اجرای یک اکتیویتی، عمل اکتیویتی دیگری متوقف میشود، این تغییر از طریق روش های پاسخگویی در چرخه حیات اکتیویتی (activity’s lifecycle callback methods) ، شناخته میشود. چندین روش پاسخگویی برای هر اکتیویتی که ناشی از تغییر در وضعیت آن است، وجود دارد. روشهایی مانند سیستم در حال ساخت اکتیویتی است (creating activity)، در حال متوقف کردن آن است ( stopping activity)، درحال ازسرگیری پردازش است (resuming activity) یا درحال ازبین بردن آن است (destroying activity). بنابراین، هر روش پاسخگویی فرصتی را دراختیارتان میگذارد تا بسته به وضعیت حال حاضر سیستم، عمل خاصی که مد نظرتان است را انجام دهید. بعنوان نمونه، زمانیکه برنامه در توقف است، اکتیویتی میبایست آبجکت های حجیم مانند ارتباطات شبکه و دیتابیس را آزاد کند. زمانیکه فعالیت اکتویتی مجدداً از سر گرفته میشود، میتوانید دوباره منابع مورد نیازتان را دوباره سازی کنید و به ادامه کاری که قبلاً میکردید بپردازید. تمام این انتقال ها بین وضعیت های مختلف اکتیویتی بخشی از چرخه حیات اکتیویتی است.

در ادامه این بخش مفاهیم پایه راجع به ساخت و استفاده از اکتیویتی شرح داده میشود. همچنین، چرخه حیات اکتیویتی بطور کامل مورد بررسی قرار میگیرد تا بتوانید به مدریت وضعیت های مختلف اکتیویتی در چرخه حیات آن بپردازید.

ساخت اکتیویتی

برای ساخت یک اکتیویتی، باید یک زیر کلاس از Activity بسازید (یا یک زیر کلاس از کلاسهای موجود). در زیر کلاستان، میبایست متدهای پاسخگویی را اجرا کنید تا سیستم بداند در وضعیت های مختلف چه کارهایی باید انجام دهد، مثلاً زمانیکه اکتیویتی درحال ساخته شدن است، درحال توقف است، درحال از سرگیری کار است و یا در حال از بین رفتن است (destroy). دو تا از مهمترین متدهای پاسخگویی در ذیل معرفی شده اند.

()onCreate : بصورت اجباری باید این متد را اجرا کنید. سیستم این متد را زمانیکه درحال ساخت اکتیویتی است، صدا میزند. درحین اجرا، شما میبایست کامپوننت هایی را که در اکتیویتان معرفی کرده اید، مقدار دهی (initialize) کنید. از همه مهمتر، اینجا محلی است که متد ()setContentView بمنظور اجرا و ساخت واسط گرافیکی و کاربری برای این اکتیویتی، میبایست معرفی شود.

()onPause : سیستم زمانی این متد را اجرا میکند که کاربر در حال ترک این اکتیویتی است (ترک اکتیویتی لزوماً به معنی خارج شدن (destroy) از اکتیویتی نیست). اینجا جایی است که معمولاً باید تغییرات مهم مانند قطع موزیک، اجرا شود (به این خاطر که کاربر ممکن است برنگردد).

چندین متد پاسخگویی دیگر نیز وجود دارد که شما میتوانید از آنها در اکتیویتی استفاده کنید تا زمانیکه یکدفعه با توقف (unexpected interruptions) روبرو شدید، بتوانید آن حالت را مدریت کنید. تمامی متدهای پاسخگویی در ادامه این مبحث و در بخش “مدریت چرخه حیات اکتیویتی” مورد بررسی قرار خواهند گرفت.

اجرای واسط کاربری (user interface)

واسط کاربری در یک اکتیویتی از مجموعه ای از view ها تشکیل میشود (یا آبجکت هایی از این کلاس). هر view محیط مستطیل شکل خودش را در داخل اکتیویتی کنترل میکند و میتواند به درخواست کاربر پاسخ دهد.  بعنوان مثال، یک view ممکن است دکمه ای (button) باشد که وقتی کاربر آنرا لمس کرد، یک عملی را اجرا کند.

اندروید بصورت پیش فرض چندین و چند view را آماده کرده است تا در طراحی واسط کاربری مورد استفاده قرار گیرد. ویدجت ها (Widgets)، view هایی هستند که شکل گرافیکی دارند و قادر به پاسخگویی به کاربر می باشند، مانند، button, text field, checkbox و یا تنها یک تصویر. پوسته ها (Layouts)، view هایی هستند که از کلاس ViewGroup مشتق میشوند که نحوه قرار گیری view ها در پوسته را مشخص میکنند. مثلاً view ها بصورت خطی پشت سر هم قرار بگیرند (linear layout)، بصورت جدولی قرار بگیرند (grid layout) و یا نسبت به هم قرار بگیرند (relative layout). شما میتوانید با ساخت یک زیر کلاس از View و ViewGroup ویدجت مورد نیاز خودتان را بسازید و در اکتیویتی از آن استفاده کنید.

معمول تریت راه به منظور طراحی پوسته و قرار دادن view ها در آن، استفاده از XML است که بعنوان منبع (resource) در برنامه قرار خواهد گرفت. با استفاده از دستور ()setContentView میتوانید یک پوسته را بعنوان واسط کاربری معرفی کنید. شما همچنین میتوانید در کد برنامه هم یک view بسازید و با قرار دادن آن در ViewGroup از آن استفاده کنید. سپس ViewGroup را با استفاده از ()setContentView بعنوان واسط کاربری معرفی کنید.

معرفی کردن اکتیویتی در مانیفست

بمنظور استفاده از اکتیویتی در برنامه، قبل از هرچیز اکتیویتی باید به سیستم معرفی شود. برای این منظور، فایل مانیفست برنامه را باز کنید و المان <activity> را بعنوان فرزند (child) المان <application> قرار دهید. بعنوان مثال:

چندین و چند خصوصیت دیگر هم هستند که میتوانید به المانها اعمال کنید، مانند قرار دادن برچسب (label) برای اکتیویتی، قرار دادن آیکون برای برنامه و ایجاد استایل برای واسط کاربری اکتیویتی.

 

استفاده از فیلتر منظوری (intent filters)

هر اکتیویتی ممکن است با استفاده از المان <intent-filter> چندین اینتنت فیلتر را بمنظور معرفی، چگونگی فعال کردن این برنامه توسط برنامه های دیگر، معرفی کند.

زمانیکه شما یک برنامه را با ابزار اندروید SDK می سازید، یک اکتیویتی که اکتیویتی اصلی شماست با یک اینتنت فیلتر ساخته میشود. این اکتیویتی با عنوان Main معرفی میشود و طبقه بندی آن اجرا کننده (launcher) است. تعریف اینتنت فیلتر مانند زیر است:

المان <action> میگوید که این اولین اکتیویتی است که باید اجرا شود. المان <category> میگوید که این اکتیویتی میبایست قسمت اجراشونده های سیستم لیست شود (تا به کاربر اجازه داده شود برنامه را اجرا کند).

اگر دوست ندارید اجازه دهید تا برنامه های دیگر برنامه شما را اجرا کنند، به فیلترهای دیگر نیازی ندارید. تنها یک اکتیویتی باید بصورت main معرفی شود و در طبقه اجراشوندها (launcher) قرار گیرد، مانند مثال بالا. بنابراین برنامه شما برای سایر برنامه های دیگر قابل دسترس نخواهد بود و باید بصورت صریح اجرا شود (در بخش بعد راجع به آن توضیح خواهم داد).

اما، اگر میخواهید که اکتیویتیتان بصورت ضمنی به سایر اکتیویتی ها جواب دهد، میبایست اینتنت فیلترهای بیشتری به اکتیویتان معرفی کنید. برای هر نوع منظوری (intent) که میخواهید اکتیویتان اجرا شود، باید یک <intent-filter> داشته باشید که شمال المان <action> باشد و بصورت اختیاری میتوانید المانهای <category> و <data> را نیز به آن اضافه کنید. این المانها نوع المانی که برنامه باید به آن پاسخ دهد را معلوم میکند.

 

ادامه مبحث در “اکتیویتی ها (۲)

 

Share