پردازش یا process در اندروید

پردازش یا Process در اندروید چیست؟

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

پردازش یا process اندروید

پردازش یا همان Process اصلی ترین نقش در اجرا شدن اپلیکیشن را ایفا میکند. همه اپلیکیشن ها روی یک Process خصوصی که مخصوص خودشان است اجرا میشوند. در این مقاله درباره مفهوم پردازش ها و انواع آنها صحبت کردیم. لیست تیتر های این نوشته را میتوانید در باکس زیر مشاهده کنید.


پردازش یا Process چیست؟

پردازش در اندروید چیست

همانطور که میدانید سیستم عامل اندروید بر اساس لینوکس ساخته شده است. بنابراین، اندروید یک پردازش به همراه یک نخ، برای هر اپلیکیشن درست میکند. بصورت پیشفرض همه کامپوننت های یک اپلیکیشن یکسان، باید روی یک پردازش اجرا شوند و اکثر اپلیکیشن ها نباید این روند را تغییر بدهند. این Process که برای اپلیکیشن ساخته میشود، هم اسم با ApplicationID آن است که در فایل build.gradle تعریف شده است.

پس در سیستم عامل اندروید هر اپلیکیشن که میخواهد اجرا شود یک Process مخصوص به خودش را دارد و هیچ اپلیکیشنی نمیتواند به پردازش نرم افزار دیگر دسترسی داشته باشد. البته میتوانید برای یک اپلیکیشن چندین پردازش داشته باشید اما این کار زیاد معمول نیست و برای اکثر نرم افزارهایی که ما درست میکنیم اصلا نیازی به داشتن چند پردازش جداگانه وجود ندارد.


مراحل چرخه عمر یک Process

چرخه عمر پردازش در اندروید

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

یک پردازش در اندروید میتواند در پنج سطح اهمیت در این سلسله مراتب قرار بگیرد. این مرحله ها را به ترتیب اهمیت برای سیستم عامل با هم بررسی میکنیم.


1- پردازش Foreground

foreground process در اندروید

یک پردازش مورد نیاز برای کارهایی که کاربر همین الان دارد با دستگاه انجام میدهد. پردازش Foreground میزبان اپلیکیشنی است که همین الان روی موبایل باز است. یعنی بالاترین اهمیت بین Process ها در اندروید، مخصوص پردازشی است که کاربر در حال کار کردن با آن میباشد. یک پردازش به عنوان Foreground در نظر گرفته میشود، اگر هرکدام از شرایط زیر برای آن درست باشند:

  • اگر میزبان یک Activity باشد که کاربر در حال تعامل با آن است (یعنی متد onResume آن اکتیویتی باید فراخوانی شده باشد).
  • اگر Process میزبان یک Service باشد که به یک اکتیویتی Bound شده که کاربر در حال تعامل با آن است.
  • اگر میزبان یک سرویس باشد که در Foreground در حال اجرا باشد (یعنی متد startForeground درون آن صدا زده شده باشد).
  • اگر پردازش میزبان یک Service باشد که در حال اجرای یکی از متدهای چرخه عمر خودش است (مثل onCreate، onStart یا onDestroy).
  • اگر میزبان یک BroadcastReceiver که در حال اجرای متد onReceive است.

بصورت عادی، تعداد بسیار کمی پردازش Foreground در یک زمان وجود دارند. این Process ها به عنوان آخرین موارد از بین میروند. یعنی زمانی که سیستم دیگر نمیتواند به کارهای خودش ادامه بدهد. در این زمان برای اینکه رابط کاربری بلاک نشود، باید پردازش های Foreground هم بسته شوند.

مثال: فرض کنید کاربر در حال استفاده از اپلیکیشن Whatsapp است، پس اپلیکیشن واتساپ در شرایط Foreground قرار میگیرد. این پردازش اولویت بسیار بالایی برای سیستم دارد و فقط زمانی از بین میرود که حافظه سیستم به قدری کم شده باشد که همین اپلیکیشن هم نتواند به اجرا شدن ادامه بدهد.


2- پردازش Visible

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

visible process اندروید

از بین بردن این پردازش ها میتواند تاثیر منفی زیادی روی تجربه کاربری داشته باشد، زیرا کاربر میتواند اتفاقاتی که در این اکتیویتی ها رخ میدهد را مشاهده کند. پردازش های Visible تا زمانی زنده میمانند که سیستم مجبور نباشد به خاطر کمبود حافظه، اجرای پردازش های Foreground را متوقف کند. یعنی اگر تا آنجایی سیستم کمبود حافظه داشت که نتوانست پردازش های Foreground را ادامه بدهد، پردازش های Visible متوقف خواهند شد.

مثال: بعضی از اپلیکیشن ها ممکن است نیاز به مجوز هایی مانند دسترسی به دوربین، حافظه های دستگاه و غیره داشته باشند. در این مواقع یک دیالوگ باکس روی صفحه نشان داده میشود که برای درخواست مجوز از کاربر اجازه میگیرد. در این لحظه، پردازشی که میزبان اکتیویتی ما هست به حالت Visible خواهد رفت.


3- پردازش Service

یک Process در حالت Service قرار میگیرد اگر در حال اجرا بوده و در حالت های Foreground و Visible نباشد. این پردازش ها بصورت مستقیم برای کاربران اپلیکیشن قابل دیدن نیستند. این پردازش ها برای اپ هایی که میخواهند تسک های پس زمینه انجام بدهند بسیار کارآمد هستند. سیستم عامل تا زمانی که پردازش های Foreground و Visible حافظه کافی برای اجرا داشته باشند، پردازش های Service به زندگی خودشان ادامه میدهند.

مثال: وقتی که میخواهید یک فایل PDF را با استفاده از نرم افزاری مانند Whatsapp آپلود کنید، این کار با استفاده از یک Service Process در پس زمینه انجام خواهد شد.


4- پردازش Background

مرحله Background برای پردازش ها جایی است که در آن کامپوننت های اندروید در مرحله onStop چرخه عمر خودشان قرار دارند. سناریویی را فرض کنید که کاربر در حال استفاده از اپلیکیشن است و ناگهان دکمه Home را میزند. در اثر این حرکت کاربر، پردازش ما از حالت Foreground به Background میرود. وقتی که اپلیکیشن به حالت Background میرود، اپلیکیشن در مکان اول صف LRU Cache قرار میگیرد و وقتی هم کاربر دوباره اپلیکیشن را باز کند، حالت پردازش به Foreground برمیگردد.


5- پردازش Empty

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


مدیریت پردازش ها در اندروید

اندروید بصورت اتوماتیک پردازش ها را مدیریت میکند، به همین دلیل ما نیازی به Task Killer در اندروید نداریم. اما مدیریت Process ها در اندروید به چه شکل انجام میشود؟ وقتی که سیستم عامل به حافظه بیشتری نیاز داشته باشد، ابتدا شروع به از بین بردن پردازش های کم اهمیت تر میکند. یعنی در شرایط کمبود مموری، اندروید از Process های خالی و Background شروع میکند.

اگر سیستم باز هم به مقدار بیشتری از رم نیاز داشته باشد (مثلا فرض کنید یک بازی سنگین را روی دستگاهی که مقدار رم کمی دارد باز کردیم)، اندروید شروع به از بین بردن پردازش های Service میکند. در این مرحله ممکن است فایل هایی که در حال دانلود هستند یا موسیقی که دارید گوش میدهید متوقف شوند.

مدیریت پردازش ها در اندروید

در بسیاری از موارد، شما اصلا نیازی ندارید درباره این روند در سیستم عامل نگرانی داشته باشید. اندروید بصورت هوشمند حافظه رم شما را مدیریت میکند تا نرم افزارها به خوبی اجرا شوند.

البته اندروید در برابر اپلیکیشن ها به قدری انعطاف نشان میدهد که اپلیکیشن ها حتی اجازه دارند رفتارهای اشتباه داشته باشند. به عنوان مثال، یک اپلیکیشن که طراحی درستی ندارد میتواند یک سرویس را راه اندازی کند که برای همیشه در پس زمینه اجرا شود و باقی بماند. این سرویس میتواند CPU شما را برای مدت طولانی درگیر کند و باتری بیشتری را در دستگاه مصرف کند.


ارتباطات میان پردازشی (Inter Process Communications)

ارتباطات میان پردازشی یا Inter Process Communications بصورت مخفف به نام IPC در سیستم عامل اندروید شناخته میشود. اندروید برای IPC ها مکانیزمی ارائه میدهد که از Remote Procedure Calls یا RPC ها در آن استفاده میشود. در این مکانیزم یک متد توسط اکتیویتی یا بقیه کامپوننت های اپلیکیشن صدا زده میشود، اما بصورت ریموت (یعنی در یک پردازش دیگر) اجرا خواهد شد و اگر نتیجه ای داشته باشد به همان کامپوننتی که آن را صدا زده بود برگردانده میشود.


سوالی دارید؟

در این نوشته درباره پردازش ها یا همان Process ها در سیستم عامل اندروید صحبت کردیم و انواع آن ها را بررسی کردیم. اگر هنوز در این باره سوالی در ذهن شما وجود دارد یا نیاز به توضیحات بیشتر دارید حتما در قسمت نظرات (همین پایین) بنویسید و این مقاله آموزشی را کامل تر کنید.


منابع بیشتر برای مطالعه

میتوانید از منابع زیر برای مطالعه درباره پردازش ها استفاده کنید:

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا