خانه » آموزش » اندروید » کاربا IntentService و تفاوت آن با Service

کاربا IntentService و تفاوت آن با Service

همانطور که می دانید سرویس ابزاری است که توسط آن دستورات را به بکگراند برده و درآنجا اجرا می کنیم. در یک برنامه می توان از تعداد زیادی سرویس بطور همزمان  استفاده کرد و برای متوقف کردن آنها هم می توان از داخل برنامه  و یا بصورت داخلی با دستور stopSelf عمل کرد.

تفاوت های اصلی IntentService با Service در این است که بعد از ایجاد آن در Worker دیگری جدا از thread برنامه قرار می گیرد. برنامه به راحتی می تواند با آن ارتباط برقرار کند و خود IntentService نیز بعد از انجام وظایف محول شده بسته می شود و لازم نیست نگران هندل کردن آن باشیم. همانگونه مطلع هستید توسط Service می توانیم چندین task موازی داشته باشیم در صورتی که اگر چند نمونه از intentService تولید کنیم همگی در یک thread بصورت صف پشت هم قرار می گیرند تا پس از اتمام دیگری اجرا شوند و به نظر می رسد برای انجام یکسری دستورات batch بصورت متوالی و پشت سرهم هستند، بسیار مناسب باشد.

in short, a Service is a broader implementation for the developer to set up background operations, while an IntentService is useful for “fire and forget” operations, taking care of background Thread creation and cleanup

جدول زیر نمایانگر تفاوت های عمده  می باشد:

chart

به مثال زیر توجه کنید: می خواهیم بعد از گرفتن ورودی توسط کاربر IntentService ای اجرا کنیم که کلاسی به نام  MyData ساخته و بعد از مقداردهی آن به برنامه بازگرداند و برنامه نیز در صورت باز بودن آن داده را نمایش دهد. برای ارتباط بین سرویس و برنامه از
BroadcastReceiver استفاده می کنم و برای پاس دادن داده از اینترفیس
Serializable

کلاس  MyData به صورت زیر می باشد:

حال سرویس را در Manifest تعریف می کنیم:

برای ارتباط برقرار کردن از سرویس کافی است که Broadcast Receiver ای تعریف کنیم با فیلتری مشترک که در MainActivity باشد. همانطور که می دانید یکی از بهترین روش های ارتباط سرویس و برنامه استفاده از Broad Cast Receiver است. روش بدین صورت است که برنامه گوش خود را به فیلتر خاصی تیز می کند! (register) سپس سرویس نیز پیغامی با فیلتر موردنظر منتشر می کند. پس برنامه به صدای سرویس عکس العمل نشان داده و اطلاعات را گرفته و سپس نمایش می دهد. به همین سادگی.

بعد از لمس شدن دکمه شروع در صورتی که برنامه را نبسته باشید پیغام Toast را مشاهده خواهید کرد.

Screenshot_20160620-170201

آزمایش کردن اجرای چند IntentService باهم نیز بسیار ساده است. کافی است  سرویس خودمان را چندبار  پشت سر هم اییجاد کنید و خواهید دید که هرکدام  بعد از ۵ ثانیه ( یعنی تمام شدن کارهای سرویس قبلی) اجرا خواهند شد. یعنی بصورت موازی نبوده و در صف قرار می گیرند.

در جواب یکی از دوستان سوالی پرسیده بودند که آیا این هم مانند سرویس در صورت بسته شدن برنامه اجرا می شود یا خیر، باید عرض کنم “بله”. IntentService هم مانند سرویس در صورت بسته بودن برنامه اجرا می شود. برای تست این قضیه می توانید
MainActivity را به این صورت تغییر داده و نتیجه را ببینید:

تلاش من در آموزش ها این است که نه تنها مورد آموزش بلکه موارد دیگری را که به نظرم مفید است استفاده کنم. به عنوان مثال در این بحث از
BroadcastReceiver و
Serializable

استفاده کردم. مطمئناً خیلی از دوستان آشنایی کامل دارند و استفاده می کنند. اما دوستانی که برایشان تازه است حتماً راجع به آنها خوانده و در صورت نیاز سوال بپرسند. امیدوارم مطالب مفید بوده باشد. درصورتی که سوال و یا نکته نظری داشتید کامنت بگذارید. خیلی ممنون

آموزش برنامه نویسی اندروید

درباره مهدی تاجیک

مهندس نرم افزار و مدیر پروژه. از سال 82 برنامه نویسی رو بصورت جدی شروع کردم و از سال 90 برنامه نویسی اندروید می کنم. علاقه زیادی به یادگرفتن و یاد دادن دارم.

۲ دیدگاه

  1. سلام
    من کد شمارو کپی کردم اما تست نداده.
    ضمنا میخواستم ببینم میشه از این سرویس برای زمانی ک برنامه بسته هم استفاده کرد؟

    • سلام. تغییرات کوچکی در کد اعمال کردم. حتماً متدstartService را استفاده کنید. چون در مثال من در فایل xml استفاده شده که شاید شما آن را فراموش کرده اید که این خط را اضافه کنید: android:onClick=”startService”

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

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme