میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

سرویس های اختصاصی در اندروید

برای پیاده سازی یک سرویس اختصاصی، ابتدا لازم است آن را با استفاده از تگ service در لایه ی XML ( فایل تنظیمات AndroidManifest.xml) تعریف نموده و سپس در کدهای جاوا (کلاسی که سرویس را پیاده سازی می کند) از کلاس Service یا یکی از کلاس های مشتق آن ارث بری نمایید.

کد زیر نحوه ی تعریف سرویس در لایه ی xml و پیاده سازی آن در کلاس های جاوا را نمایش می دهد.

 

<service
android:name="MyService"
android:icon="@drawable/icon"
android:label="@string/service_name"
>
</service>
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
}

 

دیگر کامپوننت های نرم افزاری اندروید ( activity ،receiver ،service) می توانند با فراخوانی تابع ،startService(intent) یک سرویس اندروید را راه اندازی کنند.

// use this to start and trigger a service
Intent i= new Intent(context, MyService.class);
// potentially add data to the intent
i.putExtra(“KEY1”, “Value to be used by the service”);
context.startService(i);

روش دیگر راه اندازی سرویس، فراخوانی متد () bindSerivce می باشد. از این طریق شما می توانید مستقیما با service مورد نظر تعامل داشته باشید.


فرایند راه اندازی و اجرای سرویس

چنانچه پس از فراخوانی متد startService(intent) سرویس همچنان راه اندازی نشده باشد، آنگاه آبجکت service ایجاد شده و متد () onCreate از کلاس سرویس فراخوانی می شود.

پس از اجرای سرویس، متد  onStartCommand(intent) در سرویس فراخوانی می شود. سپس آبجکت Intent را به عنوان پارامتر از تابع فراخوانده شده ی  startService(intent) دریافت می کند.

در واقع سیستم اندروید با فراخوانی متد () ،startService تابع  onStartCommand(intent) را زمانی صدا می زند که کامپوننت نرم افزاری دیگری همچون activity نیاز به اجرای سرویس مورد نظر داشته باشد. لازم به ذکر است که اگر برنامه نویس این متد را پیاده سازی کند، آنگاه مسئولیت متوقف نمودن سرویس را بایستی خود با صدا زدن توابع () stopSelf() ،stopService بر عهده بگیرد.

اگر  startService(intent) صدا خورده شود، درحالی که سرویس همچنان در حال اجر است، در آن صورت متد ()onStartCommand نیز فراخوانی می شود. از این جهت سرویس بایستی این قابلیت و آمادگی را داشته باشد که متد ()onStartCommand بارها صدا خورده شود.

نکته: در صورتی که این متد دوبار در کد فراخوانی شود، چه اتفاق رخ خواهد داد؟ آیا لازم است نگران همگام سازی فرخوانی های () onStartCommand باشید؟ در پاسخ باید گفت خیر. این متد را سیستم اندروید در thread اصلی (UI) صدا می زند، از این جهت امکان فراخوانی همزمان آن در دو thread متفاوت وجود ندارد.

سرویس تنها یکبار راه اندازی می شود، فارغ تعداد دفعاتی که متد () startService فراخوانی می شود.

 


رفتار باز آغازی و restart سرویس 

سرویس داخل بدنه ی متد () onStartCommand خود یک مقدار int را برمی گرداند (return) .

این دستور رفتار سرویس را در صورتی که محیط اندروید (platform) مجبور به خاتمه دادن سرویس و حذف آن از حافظه شود را مشخص می نماید. برای این منظور می توانید از ثوابت زیر استفاده نمایید. این ثوابت به همراه شرح کاربرد در زیر ذکر شده اند.

 

Service.START_STICKY :  اگر سیستم سرویس را از حافظه حذف کرد، سرویس مجددا راه اندازی می شود. آبجکت intent ارسالی به متد حامل مقدارonStartCommand nul l خواهد بود. این گزینه اغلب برای سرویس هایی بکار می روند که خود اطلاعات مربوط به وضعیتشان را مدیریت کرده و وابستگی به داده های موجود در Intent ندارند.

Service.START_NOT_STICKY : سرویس راه اندازی نشده است. برای سرویس هایی مورد استفاده قرار می گیرد در فواصل زمانی معین راه اندازی می شوند. سرویس تنها هنگامی راه اندازی می شود که runtime تعدادی فراخوانی () startService را از زمان حذف سرویس از حافظه، به صورت معلق و آماده ی اجرا داشته باشد

 

Service.START_REDELIVER_INTENT : عملکردی مشابه دارد باService.START_STICKY این تفاوت که آبجکت intent اصلی onStartCommand مجددا به متد ارسال می شود.

 


متوقف کردن یک سرویس

برای متوقف کردن یک سرویس کافی است متد () stopService را صدا بزنید. فارغ از تعداد دفعاتی که متد () startService را برای راه اندازی خود سرویس فراخوانی کردید، یکبار صدا زدن تابع () stopService سرویس مورد نظر را کاملا متوقف می سازد.


)IntentServices (ارث بری از کلاسIntentServices استفاده از
یک سرویس می تواند خود را با فراخوانی متد () stopSelf متوقف کند. این تابع معمولا زمانی صدا خورده می شود که سرویس کارش کاملا تمام شده باشد.

 


استفاده از IntentServices ( ارث بری از کلاس IntentServices )

می توانید از کلاس IntentService برای پیاده سازی سرویس استفاده نمایید.

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

کلاس IntentService متد () onHandleIntent را ارائه می دهد. این متد را سیستم اندروید به صورت ناهمزمان ( asynch ) فراخوانی می نماید.

 


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

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

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

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟