بررسی سرویس در اندروید
service یک جزءی از برنامه است که می تواند عملیات طولانی مدت را در پس زمینه انجام دهد. serviceها شامل UI نیستند, به این معنی که چیزی به کاربر نمایش نمیدهند. پس از شروع، یک service ممکن است برای مدتی به اجرا ادامه دهد، حتی پس از اینکه کاربر به برنامه دیگری سوئیچ کند و برنامه فعلی را ببندد. علاوه بر این، یک کامپوننت می تواند به یک سرویس متصل شود تا با آن تعامل داشته باشد و حتی ارتباطات بین فرآیندی (IPC) را با آن انجام دهد. به عنوان مثال، یک سرویس میتواند عملیات ارتباط شبکه را انجام دهد، موسیقی پخش کند، عملیات I/O فایل را انجام دهد یا با ارائهدهنده محتوا (اکتیویتی) تعامل داشته باشد، که همه اینا در پس زمینه انجام میشود.
احتیاط : یک سرویس در ترد اصلی فرآیند میزبانی خود اجرا می شود. این سرویس ترد خاص خود را ایجاد یا اجرا نمی کند و در یک فرآیند جداگانه اجرا نمی شود مگر اینکه شما خلاف آن را مشخص کنید. برای جلوگیری از خطاهای Application Not Responding (ANR) باید هرگونه عملیات مسدود کردن را در یک ترد جداگانه در سرویس اجرا کنید.
انواع سرویس ها در اندروید
در اندروید سه نوع سرویس مختلف وجود دارد:
Foreground
یک سرویس پیش زمینه یا همان foreground عملیاتی را انجام می دهد که برای کاربر قابل توجه است. به عنوان مثال، یک برنامه صوتی از یک سرویس foreground برای پخش یک آهنگ صوتی استفاده می کند. سرویس پیش زمینه باید یک اعلان یا نوتیفیکیشن را بصورت دائمی هنگام اجرا بودن نمایش دهد. سرویسهای پیشزمینه حتی زمانی که کاربر با برنامه ارتباط برقرار نمیکند، همچنان میتوانند اجرا شوند.
هنگامی که از یک سرویس پیش زمینه استفاده می کنید، باید یک اعلان نمایش دهید تا کاربر از اجرای سرویس مطلع باشد. این اعلان را نمی توان رد کرد مگر اینکه سرویس مربوطه متوقف شود یا از پیش زمینه حذف شود.
Background
یک سرویس پس زمینه یا همان background عملیاتی را انجام می دهد که کاربرمستقیماً از آن مطلع نمی باشد. به عنوان مثال، اگر یک برنامه بخواهد فشرده سازی فضای ذخیره سازی خود را انجام بدهد, معمولاً از یک سرویس پس زمینه استفاده خواهد کرد.
اگر برنامه شما از نسخه API 26 یا بالاتر را استفاده کند. زمانی که خود برنامه در پیشزمینه (در حال اجرا و در دید کاربر) نباشد, سیستم محدودیتهایی را برای اجرای سرویسهای background اعمال میکند. به عنوان مثال، شما نباید در سرویس پس زمینه به اطلاعات موقعیت مکان دسترسی داشته باشید. در عوض، وظایف را با استفاده از WorkManager زمان بندی کنید.
Bound
یک سرویس زمانی محدود می شود که یک کامپوننت از برنامه مانند یک اکتیویتی با فراخوانی bindService() به آن متصل شود. یک سرویس محدود یا همان Bound یک رابط گیرنده-سرور ارائه می دهد که به اجزا اجازه می دهد با سرویس تعامل داشته باشند، درخواست ها را ارسال کنند، نتایج را دریافت کنند، و حتی این کار را در سراسر فرآیندهای با ارتباطات بین فرآیندی (IPC) انجام دهند. یک service محدود فقط تا زمانی اجرا می شود که یک کامپوننت از برنامه به آن متصل باشد. چندین مؤلفه می توانند به طور همزمان به سرویس متصل شوند، اما وقتی همه آنها از هم جدا شوند، سرویس از بین می رود.
خلاصه بررسی
اگر چه این توضیحات بطور کلی انواع سرویسها را به طور جداگانه مورد بحث قرار داده است. اما service شما میتواند به هر دو صورت کار کند. میتوان آن را راهاندازی کرد تا بهطور نامحدود در حال اجرا باشد و همچنین امکان اتصال را نیز برای آن فراهم کرد. این کار فقط به این بستگی دارد که شما کدام متد بازگشتی را صدا می زنید. onStartCommand() برای اجازه دادن به کامپوننت ها برای شروع آن و onBind() برای اجازه دادن به اتصال شدن به آن.
صرف نظر از اینکه service شما شروع یا محدود شده است یا هر دو، هر کامپوننت از برنامه می تواند با همان روش Intent که یک اکتیویتی برای اجرای آن سرویس انجام میدهد به آن سرویس (حتی از یک برنامه دیگر) متصل شود. با این حال، میتوانید سرویس را در فایل مانیفست اضافه کنید (اصلاحا اعلام کردن) تا دسترسی سایر برنامهها را مسدود کنید.