پروسس ها و چرخه حیاط اپلیکیشن
در اغلب موارد، هر اپلیکیشن اندرویدی در یک پروسس لینوکسی مجزا اجرا میشود. این پروسس زمانی ایجاد میشود که بخشی از کد برنامه نیاز به اجرا داشته باشد و تا زمانی که دیگر مورد نیاز نباشد، فعال باقی میماند. پس از آن، سیستم برای آزادسازی حافظه، این پروسس را از بین میبرد.
مدیریت طول عمر پروسس در اندروید
یکی از ویژگیهای مهم اندروید این است که کنترل طول عمر پروسس مستقیماً در اختیار اپلیکیشن نیست. در عوض، سیستمعامل بر اساس عوامل زیر تصمیمگیری میکند:
- اجزای فعال اپلیکیشن (Activity، Service، BroadcastReceiver)
- میزان اهمیت آن برای کاربر
- وضعیت حافظه (RAM) دستگاه
این موضوع باعث میشود مدیریت صحیح اجزای اپلیکیشن برای جلوگیری از بسته شدن ناگهانی آن بسیار مهم باشد.

نقش اجزای اپلیکیشن در طول عمر پروسس
اجزای اصلی اندروید که روی طول عمر پروسس تاثیر میگذارند:
- Activity
- Service
- BroadcastReceiver
اگر این اجزا به درستی استفاده نشوند، ممکن است پروسس برنامه حتی در زمان انجام یک کار مهم، توسط سیستم متوقف شود.
یک خطای رایج در BroadcastReceiver
یکی از مشکلات متداول مربوط به BroadcastReceiver است:
فرض کنید در متد onReceive() یک کار طولانی (مثل اجرای یک Thread) انجام میدهید. پس از اتمام متد:
- سیستم BroadcastReceiver را غیرفعال میکند
- اگر کامپوننت فعال دیگری وجود نداشته باشد، پروسس دیگر ضروری محسوب نمیشود
- در نتیجه، ممکن است سیستم پروسس را terminate کند
راهحل چیست؟
بهترین راه استفاده از:
- JobService
- یا WorkManager
است تا سیستم متوجه شود که هنوز کاری در حال انجام است.
نحوه مدیریت پروسسها توسط اندروید
اندروید برای مدیریت حافظه، پروسسها را بر اساس سطح اهمیت دستهبندی میکند. این دستهبندی تعیین میکند کدام پروسس زودتر از بین برود.
انواع پروسسها در اندروید (بر اساس اولویت)
1. پروسس Foreground (پیشزمینه)
این مهمترین نوع پروسس است و شامل حالاتی میشود که کاربر مستقیماً با اپلیکیشن در تعامل است:
- Activity در حالت
onResume - اجرای متد
onReceive()در BroadcastReceiver - اجرای متدهای lifecycle سرویس مثل:
onCreate()onStart()onDestroy()
🔹 این پروسسها تنها در شرایط بحرانی حافظه از بین میروند.
2. پروسس Visible (قابل مشاهده)
در این حالت، کاربر اپلیکیشن را میبیند اما با آن تعامل ندارد:
- Activity در حالت
onPause - سرویس foreground (
startForeground()) - سرویسهایی مثل:
- Live Wallpaper
- Input Method
🔹 حذف این پروسسها تاثیر منفی روی تجربه کاربر دارد.
3. پروسس Service
این نوع پروسس شامل سرویسهایی است که با startService() اجرا شدهاند:
- معمولاً در پسزمینه کار میکنند (مثل دانلود یا آپلود)
- مستقیماً قابل مشاهده نیستند
🔹 در صورت کمبود حافظه، ممکن است حذف شوند.
⚠️ نکته: سرویسهای طولانیمدت (مثلاً بیش از 30 دقیقه) ممکن است اهمیت خود را از دست بدهند تا از مصرف بیش از حد RAM جلوگیری شود.
4. پروسس Cached (ذخیرهشده)
این پروسسها دیگر فعال نیستند اما برای افزایش سرعت بازگشت به اپلیکیشن نگه داشته میشوند.
- شامل Activityهای در حالت
onStop - در لیستی به نام LRU (Least Recently Used) ذخیره میشوند
🔹 سیستم در صورت نیاز، قدیمیترین آنها را حذف میکند.
5. پروسس Empty (تهی)
- هیچ کامپوننت فعالی ندارد
- فقط برای cache نگه داشته شده
🔹 اولین گزینه برای حذف توسط سیستم
الگوریتم LRU در مدیریت حافظه
اندروید از الگوریتم LRU برای مدیریت پروسسها استفاده میکند:
- آخرین برنامههایی که استفاده شدهاند، نگه داشته میشوند
- قدیمیترینها زودتر حذف میشوند
این کار باعث میشود:
- سوییچ بین اپها سریعتر شود
- مصرف حافظه بهینه بماند
وابستگی بین پروسسها
در برخی موارد، یک پروسس به پروسس دیگر وابسته است. در این حالت:
- اولویت آن ممکن است افزایش یابد
- سیستم برای جلوگیری از اختلال، آن را حفظ میکند
جدول اولویت پروسسها در اندروید
| وضعیت پروسس | توضیح | اولویت |
|---|---|---|
| Foreground | تعامل مستقیم کاربر با Activity یا اجرای lifecycle | 1 |
| Visible | قابل مشاهده ولی بدون تعامل | 2 |
| Service | اجرای سرویس در پسزمینه | 3 |
| Cached | Activityهای متوقفشده (LRU) | 4 |
| Empty | بدون کامپوننت فعال | 5 |
جمعبندی
مدیریت صحیح چرخه حیات پروسس در اندروید نقش بسیار مهمی در:
- بهینهسازی مصرف حافظه
- جلوگیری از کرش شدن اپلیکیشن
- بهبود تجربه کاربری
دارد.
اگر به عنوان توسعهدهنده بتوانید رفتار سیستم را درک کنید، میتوانید اپلیکیشنهایی پایدارتر و حرفهایتر بسازید.